zoukankan      html  css  js  c++  java
  • JAVA设计模式之【外观模式】

    通过引入一个外观角色来简化客户端与子系统之间的交互。
    顾客无需直接和茶叶、茶具、开水等交互,整个泡茶过程由服务员来完成,顾客只需与服务员交互即可。
    通过引入一个外观角色可以降低原有系统的复杂度,同时降低客户类与子系统的耦合度。
    角色
    	外观角色Facade
    	子系统角色SubSystem
    有点像MVC的概念,Model层专门处理数据库,M层就是数据库的外观角色,C层作为客户来调用数据库。
    

    看例子

    电风扇系统

    package Facade.SwitchFacade;
    
    /**
     * Created by Jiqing on 2016/10/19.
     */
    public class Fan
    {
        public void on()
        {
            System.out.println("风扇打开!");
        }
    
        public void off()
        {
            System.out.println("风扇关闭!");
        }
    
    }
    

    空调系统

    package Facade.SwitchFacade;
    
    /**
     * Created by Jiqing on 2016/10/18.
     */
    public class AirConditioner
    {
        public void on()
        {
            System.out.println("空调打开!");
        }
    
        public void off()
        {
            System.out.println("空调关闭!");
        }
    }
    

    电灯系统

    package Facade.SwitchFacade;
    
    /**
     * Created by Jiqing on 2016/10/19.
     */
    public class Light
    {
        private String position;
    
        public Light(String position)
        {
            this.position=position;
        }
    
        public void on()
        {
            System.out.println(this.position + "灯打开!");
        }
    
        public void off()
        {
            System.out.println(this.position + "灯关闭!");
        }
    }
    
    

    电视系统

    package Facade.SwitchFacade;
    
    /**
     * Created by Jiqing on 2016/10/19.
     */
    public class Television
    {
        public void on()
        {
            System.out.println("电视机打开!");
        }
    
        public void off()
        {
            System.out.println("电视机关闭!");
        }
    }
    
    

    统一开关外观

    package Facade.SwitchFacade;
    
    /**
     * Created by Jiqing on 2016/10/19.
     */
    public class GeneralSwitchFacade {
        private Light lights[]=new Light[4];
        private Fan fan;
        private AirConditioner ac;
        private Television tv;
    
        public GeneralSwitchFacade()
        {
            lights[0]=new Light("左前");
            lights[1]=new Light("右前");
            lights[2]=new Light("左后");
            lights[3]=new Light("右后");
            fan=new Fan();
            ac=new AirConditioner();
            tv=new Television();
        }
    
        public void on()
       
     {
            lights[0].on();
            lights[1].on();
            lights[2].on();
            lights[3].on();
            fan.on();
            ac.on();
            tv.on();
        }
    
        public void off()
        {
            lights[0].off();
            lights[1].off();
            lights[2].off();
            lights[3].off();
            fan.off();
            ac.off();
            tv.off();
        }
    }
    
    

    客户端统一调用外观进行操作

    package Facade.SwitchFacade;
    
    /**
     * Created by Jiqing on 2016/10/19.
     */
    public class Client
    {
        public static void main(String args[])
        {
            GeneralSwitchFacade gsf=new GeneralSwitchFacade();
            gsf.on();
            System.out.println("-----------------------");
            gsf.off();
        }
    }
    

    结果

    左前灯打开!
    右前灯打开!
    左后灯打开!
    右后灯打开!
    风扇打开!
    空调打开!
    电视机打开!

    左前灯关闭!
    右前灯关闭!
    左后灯关闭!
    右后灯关闭!
    风扇关闭!
    空调关闭!
    电视机关闭!

  • 相关阅读:
    hbase分布式集群搭建
    hadoop分布式集群搭建
    cobbler koan自动重装系统
    nginx基础整理
    cobbler 自定义安装系统
    cobbler 自定义私有yum源
    cobbler自动安装系统
    [转]10+倍性能提升全过程--优酷账号绑定淘宝账号的TPS从500到5400的优化历程
    服务器性能调优(netstat监控大量ESTABLISHED连接与Time_Wait连接问题)
    LINUX下解决netstat查看TIME_WAIT状态过多问题
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/5975682.html
Copyright © 2011-2022 走看看