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();
    }
}

结果

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




本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/5975682.html,如需转载请自行联系原作者

相关文章
|
3月前
|
设计模式 存储 缓存
聊聊Java设计模式-装饰器模式
装饰器模式允许向一个现有的对象添加新的功能,同时不改变其结果。比如Java 中的IO框架中,`FileInputStream`(处理文件)、`ByteArrayInputStream`(处理字节数组)、`BufferedInputStream`(带缓存的处理类)等就是对`InputStream`进行的功能扩展,这就是装饰器模式的典型应用。
25 1
聊聊Java设计模式-装饰器模式
|
3月前
|
设计模式 Java
聊聊Java设计模式-外观模式
外观(Facade)模式,又叫做门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问的模式。
35 1
聊聊Java设计模式-外观模式
|
8月前
|
设计模式 Java
外观模式【Java设计模式】
外观模式【Java设计模式】
33 0
|
8月前
|
设计模式 Java 中间件
设计模式-结构型模式:外观模式
设计模式-结构型模式:外观模式
|
11月前
|
设计模式 Java
Java设计模式-外观模式(Facade)
Java设计模式-外观模式(Facade)
|
设计模式 JSON 前端开发
设计模式 - 结构型模式_外观模式
设计模式是解决程序中不合理、不易于扩展、不易于维护的问题,也是⼲掉⼤部分 ifelse 的利器,在我们常⽤的框架中基本都会⽤到⼤量的设计模式来构建组件,这样也能⽅便框架的升级和功能的扩展。 但如果不能合理的设计以及乱⽤设计模式,会导致整个编程变得更加复杂难维护,也就是我们常说的: 反设计 、 过渡设计 。⽽这部分设计能⼒也是从实践的项⽬中获取的经验,不断的改造优化摸索出的最合理的⽅式,应对当前的服务体量。
94 0
设计模式 - 结构型模式_外观模式
|
设计模式
GOF设计模式之外观模式(结构型代理模式)
GOF设计模式之外观模式(结构型代理模式)
GOF设计模式之外观模式(结构型代理模式)
|
设计模式 Java
Java设计模式 ->门面模式
Java设计模式 ->门面模式
71 0
|
设计模式 Java uml
【设计模式】Java设计模式 - 外观模式
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
177 0
【设计模式】Java设计模式 - 外观模式
|
设计模式 存储 Java
Java设计模式之装饰器模式
Java设计模式之装饰器模式
Java设计模式之装饰器模式