1. 外观模式
生活中,我们买菜要去菜市场,买水果要去水果店,买零食要去零食店。这需要去很多地方。这时超市(外观模式)出现了,在超市里你可以买到菜、水果、零食
1.1 定义、优缺点、适用场景
定义:外观(Facade)模式又叫作门面模式,是一种通过为多个复杂的子系统提供一个统一的接口。客户端不用关心内部子系统的具体细节,内部子系统的改变而不影响客户端。这样会大大降低应用程序的耦合度,提高了程序的可维护性
外观模式是迪米特法则的典型应用,优点如下:
- 降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户端
- 对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易
- 降低了大型软件系统中的编译依赖性,因为编译一个子系统不会影响其他的子系统,也不会影响外观对象
缺点:
适用场景:
- 对分层结构系统构建时,使用外观模式定义子系统中每层的入口点可以简化子系统之间的依赖关系
- 当一个复杂系统的子系统很多时,外观模式可以为系统设计一个简单的接口供外界访问
- 当客户端与多个子系统之间存在很大的联系时,引入外观模式可将它们分离,从而提高子系统的独立性和可移植性
1.2 模式的结构与实现
结构:
- 外观(Facade)角色:为多个子系统对外提供一个共同的接口
- 子系统(Sub System)角色:实现系统的部分功能,客户可以通过外观角色访问它
- 客户(Client)角色:通过一个外观角色访问各个子系统的功能
实现:
public class FacadeTest {
public static void main(String[] args) {
SuperMarket superMarket = new SuperMarket();
superMarket.buyGood();
}
}
// 外观角色: 超市
class SuperMarket {
private vegetableArea vegetableArea = new vegetableArea();
private FruitArea fruitArea = new FruitArea();
public void buyGood() {
vegetableArea.buyvegetable();
fruitArea.buyFruit();
}
}
// 子系统角色:买菜区域
class vegetableArea {
public void buyvegetable() {
System.out.println("在买菜区域买菜");
}
}
// 子系统角色:水果区域
class FruitArea {
public void buyFruit() {
System.out.println("在水果区域买水果");
}
}
运行程序,结果如下:
在买菜区域买菜
在水果区域买水果
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。