通过引入一个外观角色来简化客户端与子系统之间的交互。
顾客无需直接和茶叶、茶具、开水等交互,整个泡茶过程由服务员来完成,顾客只需与服务员交互即可。
通过引入一个外观角色可以降低原有系统的复杂度,同时降低客户类与子系统的耦合度。
角色
外观角色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();
}
}

结果

左前灯打开!

右前灯打开!

左后灯打开!

右后灯打开!

风扇打开!

空调打开!

电视机打开!

左前灯关闭!

右前灯关闭!

左后灯关闭!

右后灯关闭!

风扇关闭!

空调关闭!

电视机关闭!

最新文章

  1. bzoj4213: 贪吃蛇
  2. NGUI 的使用教程与实例(入门)(1 )
  3. @class的基本使用
  4. Newtonsoft post Json 日期格式处理
  5. IO流(数据流
  6. Repeater数据绑定和操作
  7. SRM 585 DIV 1 总结
  8. webservice底层使用Socket进行网络调用
  9. FMS带宽的需求计算法
  10. Python求解登楼梯问题(京东2016笔试题)
  11. EOJ 3242 重复数
  12. zabbix添加nginx监控
  13. 低版本的Chrome,打开url时,报错,IE确可以打开;
  14. leetcode:Single Number
  15. 【C#复习总结】析构函数
  16. while(scanf("%d %d",&a,&b)!=EOF)
  17. Python中的__init__()和__call__()函数
  18. 阅读<SMPTE 274M-2005 1920X1080>笔记
  19. JAVA笔试准备
  20. CentOS 7安装Redis4.0.10

热门文章

  1. 具体验证身份证号码规则和姓名(汉字)的java代码
  2. LinkedList 方法知识点
  3. 2015.04.19,外语,读书笔记-《Word Power Made Easy》 11 “如何辱骂敌人” SESSION 29
  4. h5-爆料view
  5. 在Android源码下编译jni所需要知道的事~
  6. 用latex画化学结构式
  7. listview添加的头部布局超过一屏头部内容显示不全
  8. 快速搭建golden gate环境
  9. [C#学习笔记之异步编程模式2]BeginInvoke和EndInvoke方法 (转载)
  10. web产品浏览器兼容性问题你有考虑到吗?