zoukankan      html  css  js  c++  java
  • 也谈设计模式Facade

      门面模式提供一个高层次的接口,使得子系统更容易使用。

      子系统与外部系统的通信必须经过一个统一的facade进行处理。

      内部系统的交互在facade中进行整合,这样,对于外部系统的使用者就不用关注内部系统的复杂性。而有facade的存在也降低了内外系统的耦合。

    1.内部系统

      1.1 内部子系统1--对茶的操作

    package designPattern.facade;
    
    public class TeaDeal {
        public void getTea() {
            System.out.println("放茶....");
        }
    
        public void cookTea() {
            System.out.println("煮茶....");
        }
    }

      1.2 内部子系统2--对水的操作 

    package designPattern.facade;
    
    public class WaterDeal {
        public void poulWater() {
            System.out.println("倒水....");
        }
    
        public void boilWater() {
            System.out.println("烧水....");
        }
    }

    2.外部调用 

        这里面我们将泡茶的流程设定为:放茶→烧水→泡茶,不采用facade模式的时候,我们会这样做

    package designPattern.facade;
    
    public class NoFacadeTest {
        public static void main(String[] args) {
            TeaDeal teaDeal = new TeaDeal();
            WaterDeal waterDeal = new WaterDeal();
            //泡
            teaDeal.getTea();
            waterDeal.boilWater();
            waterDeal.poulWater();
        }
    }

      有了facade,我们会这样做

      2.1 创建facade

    package designPattern.facade;
    
    public class Facade {
        private TeaDeal teaDeal;
        private WaterDeal waterDeal;
    
        public Facade() {
            this.teaDeal = new TeaDeal();
            this.waterDeal = new WaterDeal();
        }
        
        public void cookTea(){
            System.out.println("这是泡茶流程....");
            teaDeal.getTea();
            waterDeal.boilWater();
            waterDeal.poulWater();
        }
        
        public void boilTea(){
            System.out.println("这是煮茶流程...");
            teaDeal.getTea();
            waterDeal.poulWater();
            teaDeal.cookTea();
        }
    }

      2.2 外部调用

    package designPattern.facade;
    
    public class FacadeTest {
        public static void main(String[] args) {
            Facade facade = new Facade();
            facade.boilTea();
            facade.cookTea();
        }
    }

    3.对比分析

      在追MM和设计模式这篇神文中,对与facade的形象解释:

      我有一个专业的Nikon相机,我就喜欢自己手动调光圈、快门,这样照出来的照片才专业,但MM可不懂这些,教了半天也不会。幸好相机有Facade设计模式,把相机调整到自动档,只要对准目标按快门就行了,一切由相机自动调整,这样MM也可以用这个相机给我拍张照片了。

      与上面的示例相对应的,facade提供的方法中也有自动档这个档位(泡茶),MM不用去关注怎么去烧水怎么去倒水,泡茶成了一键式,大大的方便了MM呀。

  • 相关阅读:
    《程序猿面试宝典3》大量错误(50+)纠正表
    STM32定时器的预装载寄存器与影子寄存器之间的关系【转】
    Linux虚拟内存和物理地址的理解【转】
    UNIX系统的显示时间何时会到尽头
    assert函数用法总结【转】
    Sizeof与Strlen的区别【转】
    C语言预处理器命令详解【转】
    C#预处理器指令【转】
    I2C总线信号时序总结【转】
    用状态机实现键盘消抖【转】
  • 原文地址:https://www.cnblogs.com/kakag/p/3142842.html
Copyright © 2011-2022 走看看