主页传送门: 传送
门面模式(Facade Pattern)也叫做外观模式,是一种比较常用的封装模式。其定义如下:
Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higher-level interface that makes the subsystem easier to use.
即:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。 门面模式提供一个高层次的接口,使得子系统更易于使用。
其通用类图如下:
在门面模式中,出现了两个角色:
下面我们写一个简单的电脑启动的例子( 这个例子在许多设计模式教程中都曾出现,笔者认为这是最好的例子之一,直接借用了 )。
启动电脑我们通常只需要按下开机键就可以了,但电脑内部实际上启动了多个模块,如 CPU,硬盘,内存等。
开机键就是一个很好的门面,让程序员们无需了解 CPU 、内存和硬盘如何启动。
//CPU
public class CPU {
public void start(){
System.out.println("启动CPU");
}
}
//硬盘
public class Disk {
public void start(){
System.out.println("启动硬盘");
}
}
//内存
public class Memory {
public void start(){
System.out.println("启动内存");
}
}
如果没有开机键,我们需要这么做:
new CPU().start();
new Disk().start();
new Memory().start();
有了开机键,这些操作都交给开机键去做:
//开机键
public class StartBtn {
public void start(){
new CPU().start();
new Disk().start();
new Memory().start();
}
}
而我们只需要:
new StartBtn().start();
门面模式的优点包括:
门面模式的缺点包括:
门面模式适用于以下场景:
需要注意的是,当子系统需要频繁地修改或扩展时,门面模式可能会增加额外的开发成本和维护难度,因为每次修改或扩展都需要同时修改门面角色和底层实现。因此,在选择是否使用门面模式时,需要根据实际情况权衡利弊。
门面模式是一种结构性设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。门面模式的主要目的是将复杂的子系统封装起来,提供一个更简单的接口,使子系统更容易使用。
门面模式适用于为复杂的模块或子系统提供一个简洁的访问接口、提高子系统的独立性和稳定性等场景。然而,在使用门面模式时需要注意开闭原则的问题,以及门面角色和底层实现之间的耦合度,以避免引入额外的维护问题和风险。
如果喜欢的话,欢迎 关注 点赞 评论 收藏 一起讨论
你的支持就是我✍️创作的动力!