`
gaojingsong
  • 浏览: 1153007 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【门面设计模式】的故事来源(Facade Pattern)

阅读更多

  门面模式:门面模式(亦称外观模式Facade Pattern),外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它是一个单例模式。但整个系统可以有多个门面类。

 

故事一:

我有一个专业的Nikon相机,我就喜欢自己手动调光圈、快门,这样照出来的照片才专业,但MM可不懂这些,教了半天也不会。幸好相机有Facade设计模式,把相机调整到自动档,只要对准目标按快门就行了,一切由相机自动调整,这样MM也可以用这个相机给我拍张照片了。(相机制造者把一系列调光圈、对焦距、快门等封装成了一个自动挡按钮,只要一按钮这一系列动作一气呵成,这个按钮就是对外提供给用户的门面,用户不再需要一系列繁重操作)

 

故事二:

人是吃五谷杂粮的,饮食不协调,气候不适应,酸性体质的人就容易生病,生病了就要去医院,看病就医,走下面这个流程:病人必须先挂号,然后门诊。如果医生要求化验,病人必须首先划价,然后缴费,才可以到化验部门做化验。化验后再回到门诊室。也许第一次去看病的人,不知道流程直接进冲到医生值班室,找医生看病,可是系统中没有你的号码信息,医生在电脑上面开不了你的单子,后续就无法进行。如果有这么一个流程该多好呀:由接待员负责代为挂号、划价、缴费、取药等。这个接待员就是门面模式的体现,病人只接触接待员,由接待员与各个部门打交道。

 

故事三:

投递信件的过程是:首先写信的内容 -> 其次写信封 -> 把信放到信封里 -> 然后邮递

手机时代的来临解决了邮局的发信业务,现在有事情,发短信:只要告诉三大运营商系统,发给谁,发送什么内容,然后就不用自己写信封,封信,投递到邮筒里面的繁琐操作。

 

故事四:

安保系统由录像机、感应器、报警器三部分组成;宝安GG重启系统的时候必须按照录像机、感应器、报警器一个个接通电源,按按钮;假设监控软件自带一个一键重启功能,只要一按钮,就自动按顺序重启了。对外暴漏的操作过程就没有那么繁多,不容易出错。

 

这些故事都有一个共同点就是交互过程操作步骤繁多,容易出错:

故事一:照相时候MM可能没有对焦、调光圈就按了快门,结果找出来一张什么样的照片,你懂的;

故事二:病人没有挂号,直接冲到医生值班室就医,出现的窘况你是知道的。

 

 

门面模式说白了就是封装了一个类,简化了用户的操作步骤;而此类的作用是按顺序执行方法。调用者无需知道具体流程,只需要将要传递的参数传给该类,这样该类就按顺序执行就好了,符合高扩展性以及高内聚低耦合的原则。比如某天照相机自动挡按钮多了一个新功能,你是不知道的,你仅仅知道那是一个按钮而已;病人挂号医生医院需要检查病人是否有社保可以报销等等,对于病人来说,我来看病挂号、取药、缴费都不用我来完成,直接找接待员就行;发送信息需要检查信息内容是否健康等等;都不需要用户知道;FaceFade已经帮用户封装好了,只需要扩展就行。

 

例子(非自己原创):

 

/**
 * 门面模式/外观模式:Facade Pattern
 * 保安系统:
 * 一个保安系统由两个录像机、一个感应器和一个报警器组成。
 * 由保安操作仪器的启动和关闭:没有使用门面模式时,保安必须亲自启动每个仪器。
 * @version 2009-6-15
 * @author Winty(wintys@gmail.com)
 */
public class FacadeTest{
    public static void main(String[] args){
        //无门面模式
        Camera camera1,camera2;
        camera1 = new Camera();
        camera2 = new Camera();
        
        Sensor sensor;
        sensor = new Sensor();

        Alarm alarm;
        alarm = new Alarm();

        //启动仪器
        camera1.turnOn();
        camera2.turnOn();
        sensor.activate();
        alarm.activate();
        System.out.println("");

        /////////////////////////////////
        //使用门面模式
        SecurityFacade security = new SecurityFacade();
        security.start();
    }
}

/**
 * 门面:Facade
 */
class SecurityFacade{
    private Camera camera1;
    private Camera camera2;
    private Sensor sensor;
    private Alarm alarm;

    public SecurityFacade(){
        camera1 = new Camera();
        camera2 = new Camera();
        sensor = new Sensor();
        alarm = new Alarm();
    }
    //启动
    public void start(){
        camera1.turnOn();
        camera2.turnOn();
        sensor.activate();
        alarm.activate();
    }

    //停止
    public void stop(){
        camera1.turnOff();
        camera2.turnOff();
        sensor.deactivate();
        alarm.deactivate();
    }
}

class Camera{
    public void turnOn(){
        System.out.println("turn on the Camera.");
    }

    public void turnOff(){
        System.out.println("turn off the Camera.");
    }

    //转动
    public void rotate(){
        System.out.println("rotate the Camera.");
    }
}


class Sensor{
    public void activate(){
        System.out.println("activate the sensor.");
    }

    public void deactivate(){
        System.out.println("deactivate the sensor.");
    }

    //触发感应器
    public void trigger(){
        System.out.println("trigger the sensor.");
    }
}

class Alarm{
    public void activate(){
        System.out.println("activate the alarm.");
    }

    public void deactivate(){
        System.out.println("deactivate the alarm.");
    }

    //拉响报警器
    public void ring(){
        System.out.println("ring the alarm.");
    }
}

 

 

0
0
分享到:
评论

相关推荐

    设计模式 之 “门面模式[Facade Pattern]”

    NULL 博文链接:https://lym6520.iteye.com/blog/707060

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    7、门面模式FACADE PATTERN 8、适配器模式ADAPTER PATTERN 9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER PATTERN 11、桥梁模式BRIDGE PATTERN 12、命令模式COMMAND PATTERN 13、装饰模式...

    24种设计模式与6大设计原则

    门面模式[FACADE PATTERN] 适配器模式[ADAPTER PATTERN] 模板方法模式[TEMPLATE METHOD PATTERN] 建造者模式[BUILDER PATTERN] 策略模式 代理模式 单例模式 多例模式 工厂方法模式 抽象工厂模式 门面模式 适配器...

    解析C#设计模式编程中外观模式Facade Pattern的应用

    主要介绍了C#设计模式编程中外观模式Facade Pattern的应用,外观模式中分为门面(Facade)和子系统(subsystem)两个角色来进行实现,需要的朋友可以参考下

    JAVA设计模式.rar

    门面模式【FACADE PATTERN】  适配器模式【ADAPTER PATTERN】  模板方法模式【TEMPLATE METHOD PATTERN】  建造者模式【BUILDER PATTERN】 桥梁模式【BRIDGE PATTERN】  命令模式【COMMAND PATTERN...

    C#设计模式.PDF

    设计模式(15)-Facade Pattern 134 一、 门面(Facade)模式 134 二、 门面模式的结构 134 三、 门面模式的实现 135 四、 在什么情况下使用门面模式 135 五、 一个例子 136 六、 使用门面模式的设计 140 设计模式...

    网络编程、常用设计模式

    一、门面模式(Facade Pattern) 23 二、门面模式的结构 24 三、在什么情况下使用门面模式 24 【五】、适配器模式 25 一、适配器模式(Adapter Pattern) 25 二、类的Adapter模式的结构 25 三、对象的Adapter模式的结构 ...

    C#设计模式大全

    设计模式(15)-Facade Pattern 一、 门面(Facade)模式 二、 门面模式的结构 三、 门面模式的实现 四、 在什么情况下使用门面模式 五、 一个例子 六、 使用门面模式的设计 设计模式(16)-Bridge Pattern...

    24个设计模式与6大设计原则

    第 7 章 门面模式【FACADE PATTERN】 44 第 8 章 适配器模式【ADAPTER PATTERN】 51 第 9 章 模板方法模式【TEMPLATE METHOD PATTERN】 63 第 10 章 建造者模式【BUILDER PATTERN】 82 第 11 章...

    php设计模式 Facade(外观模式)

    模式定义:外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。...

    软件开发中的23种设计模式

    23种模式(Pattern) 1、创建形模式: 1)、单用型:Singleton 2)、工厂方法型:Factory Method...3)、门面模式:Facade 4)、装饰模式:Decorator 3、行为型模式 1)、策略模式:Strategy 2)、观察者模式:Observer

    二十三种设计模式【PDF版】

    设计模式之 Facade(门面?) 可扩展的使用 JDBC针对不同的数据库编程,Facade提供了一种灵活的实现. 设计模式之 Composite(组合) 就是将类用树形结构组合成一个单位.你向别人介绍你是某单位,你是单位中的一个元素...

    Java设计模式

    Java设计模式 策略模式【STRATEGY PATTERN】 .................................................................................................. 4 第 2 章 代理模式【PROXY PATTERN】 ..........................

    java 面试题 总结

    28、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。 public class ThreadTest1{ private int j; public static ...

    超级有影响力霸气的Java面试题大全文档

    exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。 19、同步和异步有何异同,在什么情况下分别使用他们?举例说明。  如果数据将在线程间共享。例如正在写的数据以后可能...

    Medusa:美杜莎(Medusa)是发布书评的网站。 它有两个面板

    Net Core MVC API和/或ASP.Net Net Core MVC和/或Swagger 存储库模式-依赖注入模式-工作单元模式-适配器设计模式-选项模式-门面设计模式-内存缓存-Fluent API-NLog-自动映射器-Bootstap && Bootswatch 有用的网站:...

Global site tag (gtag.js) - Google Analytics