zoukankan      html  css  js  c++  java
  • 设计模式:外观模式(门面模式)

      外观模式也叫门面模式, 它为子系统提供统一入口,封装系统复杂性。如同医院看病,病人需要与挂号,门诊,划价,化验,收费,取药等部门打交道

    如同一个子系统客户端和另一个子系统各个类打交道一样,相互耦合处理复杂,如果引入门面模式,在医院增加一个接待员,由接待员复制与上面各个

    部门打交道,那么对于病人这个客户端来说就容易很多。

    门面模式主要就两个角色。

    门面角色:客户端调用该角色方法。该角色包好各子系统的功能。

    子系统角色:完成子系統各功能

    例子:模拟注册公司流程

      1:未使用门面模式时,流程图如下

      2.使用了门面模式后(增加门面对象)

     interface GongShang {
         boolean checkName();
    }
    
    /**
     * 模擬工商局
     */
    public class BeijinGongShang implements GongShang{
        @Override
        public boolean checkName() {
            System.out.println("北京工商局检查");
            return false;
        }
    }
    

      

    interface ShuiWu {
        boolean checkCertificate();
    }
    
    /**
     * 模拟税务局
     */
    public class BeijinShuiWu implements ShuiWu {
        @Override
        public boolean checkCertificate() {
            System.out.println("北京稅務局");
            return false;
        }
    }
    

      

    interface Zhijian{
        boolean checkType();
    }
    
    public class BeijinZhijian implements Zhijian{
        @Override
        public boolean checkType() {
            System.out.println("北京質監局");
            return false;
        }
    }
    

      

    /**
     * 办理注册公司流程的门面对象
     *
     */
    public class RegisterFacade {
    
    	public void register(){
    		GongShang  a = new BeijinGongShang();
    		a.checkName();
    		Zhijian b = new BeijinZhijian();
    		b.checkType();
    		ShuiWu  c  = new BeijinShuiWu();
    		c.checkCertificate();
    	}
    
    
    }
    

      

    public class Client {
        public static void main(String[] args) {
            //使用门面模式只需要调用门面角色的方法
            new RegisterFacade().register();
        }
    }
    

      从上面的实例来看,有了这个門面类,也就是RegeisterFacader类,用户就不用亲自去调用子系统中类了,不需要知道系统内部的实现细节,甚至都不用知道系统内部的构成。

    客户端只需要跟门面类交互就可以了。

  • 相关阅读:
    Web 前端开发中一些兼容性问题及其解决办法 (持续更)
    沈逸的IT专栏---shenyisyn
    程序员该做的事
    职场需要切忌的几点——《程序员,你伤不起》
    百度天气API接口
    C#简单音乐播放器ListBox歌单列表
    CentOS7 安装java(jre 1.8)
    CentOS7 系统安装与设置
    这个可以有,记录下
    在centos 7中让网卡自启动
  • 原文地址:https://www.cnblogs.com/gcm688/p/10241497.html
Copyright © 2011-2022 走看看