实验目的
- 掌握外观模式(Facade)的特点
- 分析具体问题,使用外观模式进行设计。
实验环境
Eclipse
实验内容
电源总开关
现在考察一个电源总开关的例子,以便进一步说明外观模式。为了使用方便,一个电源总开关可以控制四盏灯、一个风扇、一台空调和一台电视机的启动和关闭。通过该电源总开关可以同时控制上述所有电器设备,使用外观模式设计该系统。
用JAVA语言实现 (或C#控制台应用程序实现)。绘制该模式的UML图。
模式UML图
模式代码(Java语言实现)
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
package sy7;
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();
}
}
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 + "灯关闭!");
}
}
public class Fan {
public void on()
{
System.out.println("风扇打开!");
}
public void off()
{
System.out.println("风扇关闭!");
}
}
public class AirConditioner {
public void on()
{
System.out.println("空调打开!");
}
public void off()
{
System.out.println("空调关闭!");
}
}
public class Television {
public void on()
{
System.out.println("电视打开!");
}
public void off()
{
System.out.println("电视关闭!");
}
}
public class Client {
public static void main(String args[])
{
GeneralSwitchFacade gsf=new GeneralSwitchFacade();
gsf.on();
System.out.println("-----------------------");
gsf.off();
}
}
运行截图
实验小结
外观模式主要适用于以下情况:
1.当需要为一个复杂的子系统提供一个简单的接口时
2.当客户端与抽象类的实现部分存在很大的依赖性是
3.当需要构建一个层次结构的子系统的时候。