模式介绍
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
模式优点
1、松散耦合,外观模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。
2、简单易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只跟门面类交互就可以了。
3、更好的划分访问层次,通过合理使用外观模式,可以帮助我们更好地划分访问的层次。
模式缺点
1、不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。
使用场景
1、当有许多复杂的模块或子系统时,需要向外提供统一访问的模块,这时候就可以用外观模式。
2、前提是模块或者子系统相对独立。
系统建模
1、电脑开机或者关机,需要调度其他组件开或关。
系统实现
/**
* 电脑内存
*/
public class Memory {
private static Memory memory= new Memory();
private Memory(){};
public static Memory getInstance(){
return memory;
}
public void open(){
System.out.println("内存起来了!");
}
public void close(){
System.out.println("内存关闭了!");
}
}
/**
* 电脑硬盘
*/
public class Disk {
private static Disk disk= new Disk();
private Disk(){};
public static Disk getInstance(){
return disk;
}
public void open(){
System.out.println("硬盘起来了!");
}
public void close(){
System.out.println("硬盘关闭了!");
}
}
/**
* 电脑CPU
*/
public class CPU {
private static CPU cpu= new CPU();
private CPU(){};
public static CPU getInstance(){
return cpu;
}
public void open(){
System.out.println("CPU起来了!");
}
public void close(){
System.out.println("CPU关闭了!");
}
}
/**
* 电脑门面类
*/
public class ComputerFacade {
private CPU cpu = CPU.getInstance();
private Memory memory = Memory.getInstance();
private Disk disk = Disk.getInstance();
public void openComputer() {
disk.open();
memory.open();
cpu.open();
}
public void closeComputer() {
disk.close();
memory.close();
cpu.close();
}
}
/**
* 客户端
*/
public class Cliant {
public static void main (String args[]){
ComputerFacade facade = new ComputerFacade();
facade.openComputer();
facade.closeComputer();
}
}
结果:
硬盘起来了!
内存起来了!
CPU起来了!
硬盘关闭了!
内存关闭了!
CPU关闭了!