生活场景
大家可能为了有一台满足自己需求的电脑,你可能会选择自己到各大厂商买配件。自己组装,但是这样需要熟悉硬件,还要考虑他们之间的兼容性。你也可能找到一家装机公司,让他们代理实现。那么这个装机公司就相当于外观模式(Facade)。
在代码中,各个零件厂商就相当于各种功能模块,客户端需要组装自己的功能模块,他们同样需要知道十分了解这些功能模块的功能,非常麻烦。所以就出现了facade模式。
由上所述可以知道facade模式有以下作用:
1.封装交互,简化调用
2.松散了客户端与子系统之间的耦合
3.更好的划分访问层次
实现形式
public class Screen {
public void size() {
System.out.println("大小:14英寸");
}
}
public class Memory {
public void capacity() {
System.out.println("容量:4G");
}
}
public class OS {
public void type() {
System.out.println("系统:win8");
}
}
public class ComputerFacade {
public void facade1() {
//下面这些组件的属性可以添加到配置文件,然后将读取到的信息添加到对应的构造函数中,以此实现不同的外观
Screen screen = new Screen();
screen.size();
OS os = new OS();
os.type();
Memory memory = new Memory();
memory.capacity();
}
}
public class Client {
public static void main(String[] args) {
ComputerFacade computerFacade = new ComputerFacade();
computerFacade.facade1();
}
}
大家可能觉得这种模式用处不大,只是将客户端代码写进了facade中,但是facade位于系统这边。
所以有以下优点:
1.未来如果模块的算法发生了变化,只用修改facade的实现就好了 。
2.facade可以被多个客户端使用,提高了代码的复用。
3.对于使用facade的使用者来说,大大节省了他们学习的成本,他们只需了解facade就可以了。