概念理解
外观模式实际上是将系统内部逻辑与客户端调用隔离开,无论系统内部多么复杂, 仅仅暴露出来非常简单的几个接口供客户端调用。外观模式是一种结构型模式。
外观模式的结构
考虑一个电脑开关的例子,电脑提供出来的接口是一个打开按钮和一个关闭按钮,至于打开电脑后电脑做什么操作,客户是不知道也不需要关心。
代码实例
public class Cpu {
private static final Cpu CPU_INSTANCE= new Cpu();
private Cpu(){
}
public static Cpu getCpuInstance(){
return CPU_INSTANCE;
}
public void start(){
System.out.println("cpu started");
}
public void shutdown(){
System.out.println("cpu is shutdown");
}
}
public class Disk {
private static final Disk DISK_INSTANCE= new Disk();
private Disk(){
}
public static Disk getDiskInstance(){
return DISK_INSTANCE;
}
public void start(){
System.out.println("Disk started");
}
public void shutdown(){
System.out.println("Disk is shutdown");
}
}
public class Memory {
private static final Memory MEMORY_INSTANCE= new Memory();
private Memory(){
}
public static Memory getMemoryInstance(){
return MEMORY_INSTANCE;
}
public void start(){
System.out.println("Memory started");
}
public void shutdown(){
System.out.println("Memory is shutdown");
}
}
public class ComputerFacade {
private Cpu cpu;
private Memory memory;
private Disk disk;
public ComputerFacade() {
cpu = Cpu.getCpuInstance();
disk = Disk.getDiskInstance();
memory = Memory.getMemoryInstance();
}
public void startCompute() {
memory.start();
cpu.start();
disk.start();
}
public void shutdownCompute() {
memory.shutdown();
cpu.shutdown();
disk.shutdown();
}
}
public class App
{
public static void main( String[] args )
{
ComputerFacade facade = new ComputerFacade();
facade.startCompute();
}
}
最小知识原则
外观模式的设计,遵循的是最小知识原则。最小知识原则的简单理解是,一个类只与直接依赖的类通信。直接依赖的类包括成员和方法参数,不包括局部变量。
遵循最小知识原则的方法应该调用:
对象本身
对象的任何组件
作为方法参数传递进来的对象
该方法创建或者实例化的对象
由此可见,应该避免调用由其他方法返回回来的对象
优点:外观模式减少了客户端和系统的耦合度,提高了安全性和灵活性
缺点:外观模式系统内部的设计不符合开闭原则。
代码源码见https://github.com/jxl198/designPattern/tree/master/facade
网友评论