外观模式

外观模式:为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
示例1

以喝茶为例。张三和李四想喝茶了,需要煮水,准备茶具,准备茶叶,然后泡茶。如果他们去茶馆,只需要跟店小二说一句来杯茶,就可以喝到自己想喝的茶了,不需要关心茶馆是怎么煮水,准备茶具,准备茶叶的

  • 煮水
public class Water {
    public void getWater() {
        System.out.println("开水已备好");
    }
}
  • 茶具
public class Cup {
    public void getCup() {
        System.out.println("茶具已备好");
    }
}
  • 茶叶
public class Tea {
    public void getTea() {
        System.out.println("茶叶已备好");
    }
}
  • 店小二
public class Waiter {
    public void serveTea() {
        new Water().getWater();
        new Cup().getCup();
        new Tea().getTea();
        System.out.println("您好客官,茶来了");
    }
}
  • 测试类
public class Demo01Test {
    public static void main(String[] args) {
        new Waiter().serveTea();
        /**
         * 开水已备好
         * 茶具已备好
         * 茶叶已备好
         * 您好客官,茶来了
         */
    }
}
总结

优点:

  1. 外观模式 对外屏蔽了子系统的细节,因此外观模式降低了客户端对子系统使用的复杂性
  2. 外观模式对客户端与子系统的耦合关系 - 解耦,让子系统内部的模块更易维护和扩展
  3. 通过合理的使用外观模式,可以帮我们更好的 划分访问的
  4. 一个子系统的修改该对其它子系统没有任何影响,而且子系统内部变化也不会影响到外观模式

缺点:

  1. 并不能限制客户端直接调用子系统,如果客户端对子系统类做太多限制则减少了可变形和灵活性。
  2. 如果设计不当,增加新的子系统就可能修改外观类的源代码,不符合开闭原则

适用场景:

  1. 在维护一个遗留的大型系统时,可能这个系统已经变得非常难以维护和扩展,此时可以考虑为新系统开发一个Facade 类,来提供遗留系统的比较清晰简单的接口,让新系统与 Facade 类交互,提高复用性
  2. 当客户端需要调用一系列复杂子系统时候,可以提供一个简单入口的时候使用外观模式
  3. 在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度

lijingyulee
91 声望7 粉丝

« 上一篇
组合模式
下一篇 »
享元模式