外观模式
外观模式:为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
示例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();
/**
* 开水已备好
* 茶具已备好
* 茶叶已备好
* 您好客官,茶来了
*/
}
}
总结
优点:
- 外观模式 对外屏蔽了子系统的细节,因此外观模式降低了客户端对子系统使用的复杂性
- 外观模式对客户端与子系统的耦合关系 - 解耦,让子系统内部的模块更易维护和扩展
- 通过合理的使用外观模式,可以帮我们更好的 划分访问的
- 一个子系统的修改该对其它子系统没有任何影响,而且子系统内部变化也不会影响到外观模式
缺点:
- 并不能限制客户端直接调用子系统,如果客户端对子系统类做太多限制则减少了可变形和灵活性。
- 如果设计不当,增加新的子系统就可能修改外观类的源代码,不符合开闭原则
适用场景:
- 在维护一个遗留的大型系统时,可能这个系统已经变得非常难以维护和扩展,此时可以考虑为新系统开发一个Facade 类,来提供遗留系统的比较清晰简单的接口,让新系统与 Facade 类交互,提高复用性
- 当客户端需要调用一系列复杂子系统时候,可以提供一个简单入口的时候使用外观模式
- 在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。