您现在的位置是:首页 > 正文

java 外观设计模式

2024-04-01 04:46:20阅读 5

外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

使用时间:

   客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。如果需要一个指向复杂子系统的直接接口, 且该接口的功能有限, 则可以使用外观模式。

简单来说,假如有十几个子系统和类需要使用,将它们的需要使用的功能封装成一个类,客户端只需要面向一个类编程,而不是面向十几个子系统和类编程。

作用:

1.客户端可以简单使用系统需要的功能,即外观设计模式提供客户端需要的功能。

2.子系统的一些内部细节可以得到隐藏 ,客户端无法访问与使用,保证了系统的安全性。

代码实现过程;

       如果去医院看病,需要一个“接待员”帮助用户处理医院看病流程。具体的操作流程为,挂号,问诊缴费,问诊,检查缴费,检查(如彩照),问诊,拿药缴费,拿药。

代码实现结果:

代码实现

定义医院父类,规范各个流程,(根据需要使用)

interface Hospital{
    public void process();
 }

定义各个子类(子系统角色),分别代表看病流程的各个步骤

 class Registration implements Hospital{
    public void process(){
         System.out.println("这里是xxxxx医院,请先挂号");
         System.out.println("挂完号成功,请缴费,之后请到对应门诊就诊");
        System.out.println();
     }
 }

 class Clinic implements Hospital{
     public  void process(){
         System.out.println("这里是门诊部,请出示挂号单据");
         System.out.println("...............问诊中................");
         System.out.println("问诊结束,需要设备检查,请先缴费,再做检查(如彩照)");
         System.out.println();
     }

     public  void reprocess(){
         System.out.println("这里是门诊部,请出示检查结果");
         System.out.println("...............问诊中................");
         System.out.println("问诊结束,保存好药方,根据药方缴费");
         System.out.println();
     }
 }


class Payment implements Hospital{
    public  void process(){
        System.out.println("这里是缴费部门,请在此缴费");
        System.out.println("........缴费中..........");
        System.out.println("缴费成功,请收好单据");
        System.out.println();
    }

 }

 class Examination implements Hospital{
     public  void process(){
         System.out.println("这里是彩照部门,请出示单据");
         System.out.println("........检查中..........");
         System.out.println("收好检查结果,返回门诊");
         System.out.println();
     }
 }

 class Medication implements Hospital{
     public  void process(){
         System.out.println("这里是药房,请出示单据");
         System.out.println("........取药中..........");
         System.out.println("取药成功");
         System.out.println();
     }
 }

 定义Hospital_process类(外观角色),用于组织子系统角色的使用顺序,并为客户端(客户角色)提供服务。

 class  Hospital_process{
     Registration registration;
     Payment payment;
     Clinic clinic;
     Examination examination;
     Medication medication;
     Hospital_process(){
         registration = new Registration();
         payment =new Payment();
         clinic= new Clinic();
         examination= new Examination();
         medication = new Medication();
     }

     public void process(){
         registration.process();//挂号
         payment.process();     //缴费(问诊费用)
         clinic.process();      //问诊
         payment.process();     //缴费(检查费用)
         examination.process(); //检查
         clinic.reprocess();     //问诊
         payment.process();      //缴费(药品)
         medication.process();   //取药
     }
 }

客户端(客户角色)只需要面向Hospital_process类进行编程,不需要面向多个子系统角色类进行编程,简化使用。同时,屏蔽了子系统角色类的内部细节,提高安全性。

 class Facade_Pattern {
     public static void main(String[] args) {
         Hospital_process hospitalprocess= new Hospital_process();
         hospitalprocess.process();
     }
 }

完整代码:

package Facade_Pattern;
 class Facade_Pattern {
     public static void main(String[] args) {
         Hospital_process hospitalprocess= new Hospital_process();
         hospitalprocess.process();
     }
 }

 class  Hospital_process{
     Registration registration;
     Payment payment;
     Clinic clinic;
     Examination examination;
     Medication medication;
     Hospital_process(){
         registration = new Registration();
         payment =new Payment();
         clinic= new Clinic();
         examination= new Examination();
         medication = new Medication();
     }

     public void process(){
         registration.process();//挂号
         payment.process();     //缴费(问诊费用)
         clinic.process();      //问诊
         payment.process();     //缴费(检查费用)
         examination.process(); //检查
         clinic.reprocess();     //问诊
         payment.process();      //缴费(药品)
         medication.process();   //取药
     }
 }

interface Hospital{
    public void process();
 }

 class Registration implements Hospital{
    public void process(){
         System.out.println("这里是xxxxx医院,请先挂号");
         System.out.println("挂完号成功,请缴费,之后请到对应门诊就诊");
        System.out.println();
     }
 }

 class Clinic implements Hospital{
     public  void process(){
         System.out.println("这里是门诊部,请出示挂号单据");
         System.out.println("...............问诊中................");
         System.out.println("问诊结束,需要设备检查,请先缴费,再做检查(如彩照)");
         System.out.println();
     }

     public  void reprocess(){
         System.out.println("这里是门诊部,请出示检查结果");
         System.out.println("...............问诊中................");
         System.out.println("问诊结束,保存好药方,根据药方缴费");
         System.out.println();
     }
 }
 
class Payment implements Hospital{
    public  void process(){
        System.out.println("这里是缴费部门,请在此缴费");
        System.out.println("........缴费中..........");
        System.out.println("缴费成功,请收好单据");
        System.out.println();
    }

 }

 class Examination implements Hospital{
     public  void process(){
         System.out.println("这里是彩照部门,请出示单据");
         System.out.println("........检查中..........");
         System.out.println("收好检查结果,返回门诊");
         System.out.println();
     }
 }

 class Medication implements Hospital{
     public  void process(){
         System.out.println("这里是药房,请出示单据");
         System.out.println("........取药中..........");
         System.out.println("取药成功");
         System.out.println();
     }
 }

  

网站文章

  • C++的public继承中的public、private和protected

    C++的public继承中的public、private和protected

        C++语言是对C语言的一种增强,而其主要贡献在于,为C语言增加了类和模板等功能,可以帮助实现面向对象编程和代码复用等更方便的功能。    C++语言的类,一般都包含两种成员,分别是成员变量和成员函数。成员变量可以用来表示该类的某些状态,而成员函数则可以用来对这些成员变量进行操作。而对于这些成员而言,最核心的概念当属类的封装和继承的概念。1. 封装    所谓封装,就是编写一个类...

    2024-04-01 04:45:38
  • 假脱机技术Spooling和守护进程

    假脱机技术Spooling和守护进程

    总结:在假脱机打印系统下,对于每个用户而言,系统并非即时执行其程序输出数据的真实打印操作,而只是即时将数据输出到缓冲区,这时的数据并未真正被打印,只是让用户感觉系统正在为自己打印;当系统引入多道程序技...

    2024-04-01 04:45:30
  • linux centos 安装svn,在CentOS 6.3中安装与配置SVN的方法

    安装说明系统环境:CentOS-6.3安装方式:yum install (源码安装容易产生版本兼容的问题)安装软件:系统自动下载SVN软件检查已安装版本复制代码代码如下:#检查是否安装了低版本的SVN...

    2024-04-01 04:45:22
  • Puppeteer万物皆可爬

    Puppeteer万物皆可爬

    puppeteer 是一个Chrome官方出品的headless Chrome node库。它提供了一系列的API, 可以在无UI的情况下调用Chrome的功能, 适用于爬虫、自动化处理...

    2024-04-01 04:44:44
  • gin post 数据参数_golang--gin获取post里body的参数

    以下内容转载自https://blog.csdn.net/weixin_36344862/article/details/111932206如题,post发送数据有几种形式,form和流是最常用的。特...

    2024-04-01 04:44:32
  • 前端实现图片下载的方法

    在任何方案下,前端都无法绕过跨域的限制,所以需要图片所在的服务器对你当前域名开放权限,否则是无法下载的,最多能做到查看图片。1、直接使用a标签的download属性。2、canvas对象+a标签。3、ajax请求(blob或base64格式)+a标签。4、domtoimage+a标签。5、form表单。6、iframe。

    2024-04-01 04:43:51
  • mybatis运行原理详解

    mybatis运行原理详解

    第一部分:项目结构user_info表:没什么好说的就3个字段User实体类:@Datapublic class User { private Long id; private Strin...

    2024-04-01 04:43:44
  • Leetcode刷题详解——子集

    Leetcode刷题详解——子集

    在递归时我们需要保证递归结束时当前的状态与进行递归操作前的状态不变,而当我们在选择进行步骤2进行递归时,当前状态会发生变化,因此我们需要在递归结束时撤回添加操作,即进行回溯。数组一定存在2^(数组长度...

    2024-04-01 04:43:36
  • 计算机毕业设计/课程设计系列基于SpringBoot的校园问答论坛管理系统

    计算机毕业设计/课程设计系列基于SpringBoot的校园问答论坛管理系统

    本课程演示的是一款基于SpringBoot的校园问答论坛管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。1. 包含:项目源码、项目文档、数据库脚本、软件工具等...

    2024-04-01 04:43:28
  • DVWA渗透测试演示(中)

    DVWA渗透测试演示(中)

    续DVWA渗透测试演示(上):六、DVWA之FileInclusion:(1)实验原理:PHP文件包含漏洞的产生原因是在通过PHP函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预料之外...

    2024-04-01 04:42:53