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