外观模式

概述

在大多数情况下,网站都会提供一个网站首页作为入口,提供通往各个子栏目的超链接。用户只需记住网站首页网站 URL,而无须记住每个子栏目的网址

同理,用户与系统的交互可以通过一个外观对象进行,提供实现各种功能的子系统接口


模式实例

一个电源总开关可以控制四盏灯、一个风扇、一台空调和一台电视机的启动和关闭,使用外观模式设计该系统

子系统类 Light

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 + "灯打开");
   }
}

子系统类 Fan

public class Fan {

   public void on() {
       System.out.println("风扇打开");
   }

   public void off() {
       System.out.println("风扇关闭");
   }
}

子系统类 AirConditioner

public class AirConditioner {

   public void on() {

       System.out.println("空调打开");
   }

   public void off() {

       System.out.println("空调关闭");
   }
}

子系统类 Televison

public class Television {

   public void on() {

       System.out.println("电视机打开");
   }

   public void off() {

       System.out.println("电视机关闭");
   }
}

外观类 GeneralSwitchFacade

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 void fanOn() {
    fan.on();
  }

  ...
}
posted @ 2020-05-02 15:25  低吟不作语  阅读(461)  评论(0编辑  收藏  举报