版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhou6282610/article/details/87688994
概念
外观模式提供一个统一的接口,用来访问子系统中的一群接口。定义了一个高层的接口,让子系统更容易使用。
下面以启动电脑为例子
首先,我们创建一个硬件的基本接口:
public interface IHardware {
public void start();
}
然后,我们创建硬件的子类实现,分别创建Cpu、硬盘、内存:
public class Memory implements IHardware {
@Override
public void start() {
System.out.println("启动内存");
}
}
public class Disk implements IHardware {
@Override
public void start() {
System.out.println("启动硬盘");
}
}
public class Cpu implements IHardware{
@Override
public void start() {
System.out.println("启动CPU");
}
}
这里就假设,在这三个子类里面都进行了非常复杂的实现,而我们启动电脑并不需要这些实现方法,那么外观模式就需要提供一个简单的执行方法来进行一键启动,就是我们的电源键,下面我们创建一个电源键:
public class StartBtn {
public void start() {
new Cpu().start();
new Disk().start();
new Memory().start();
}
}
最后,我们启动我们的电脑:
public static void main(String[] args) {
new StartBtn().start();
}
作用
提供一个简单的接口来调用了后方一群复杂的接口,让我们的系统和子系统进行了解耦。
三个角色
- 子系统:已有模块或子系统,提供了一系列复杂的接口功能。
- 外观:它了解子系统,并对外暴露一个简单的接口。
- 客户:调用外观提供的接口来实现功能,无需了解一大堆复杂的子接口。
外观模式就是迪米特法则(最少知道原则)的应用,类之间越独立越好。
应用
1、存在多个复杂的子系统。
2、重新包装来隐藏不想暴露的接口。
优点和缺点
优点:将复杂的接口简单化,减少客户端与接口之间的耦合,提高了系统的安全性。
缺点:可能产生大量的中间类,一定程度上也增加了系统的复杂度。