外观模式

来源:互联网 发布:java 字符串 编辑:程序博客网 时间:2024/05/16 08:15
外观模式:为了系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用


结构


这个定义可能对大家理解外观模式有一种误解,不是我们想象的android那种界面,这个界面就是交互方式,比如Facade里面很多子系统,如果Client直接与每个子系统交互肯定不好,如果子系统一多,到时候每个系统改一下,那么Client也必须跟着要改,那么这时候,就可以把所以的系统封装到一个类中,说得通俗点讲,Facade其实就是封装了很多系统的功能,如果系统有改变,就直接在Facade里改,那么这个时候Client就不在与每个子系统产生直接的关系了,而是与Facade关联了,代码如下:

Camara.java

package cn.hand.facade;public class Camara { public void turnOn()      {          System.out.println("开启摄像头!");      }            public void turnOff()      {          System.out.println("关闭摄像头!");      } }

Light.java

package cn.hand.facade;public class Light { public void turnOn()      {          System.out.println("开灯!");      }            public void turnOff()      {          System.out.println("关灯!");      } }

Sensor.java

public class Sensor { public void activate()      {          System.out.println("开启感应器!");      }            public void deactivate()      {          System.out.println("关闭感应器!");      }  }

Facade.java

package cn.hand.facade;public class Facade {private static Camara c1;      private static Light l1;      private static Sensor s;            static      {          c1 = new Camara();          l1 = new Light();          s = new Sensor();      }            public static void activate()      {          c1.turnOn();                    l1.turnOn();                    s.activate();      }            public static void deactivate()      {          c1.turnOff();                    l1.turnOff();                    s.deactivate();      }  }

Client.java

package cn.hand.facade;public class Client {public static void main(String[] args) {// 打开Facade.activate();System.out.println("-----------------------");// 关闭Facade.deactivate();}}

打印结果:

开启摄像头!
开灯!
开启感应器!
-----------------------
关闭摄像头!
关灯!
关闭感应器!

0 0