introduction:
外观模式:
提供一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
外观没有”封装“子系统的类,外观只是提供简化的接口。客户如果觉得有必要依然可以直接使用子系统的类。
外观模式一个很好的特征:提供简化的接口的同时,依然将系统完整的功能暴露出来,以供需要的人使用。
demo:
description:
以用户操作一台计算机为例,用户可能不了解计算机内部错综复杂的结构,但是用户可以操作它,这是因为用户使用了操作系统这个接口,由操作系统来调用错综复杂的结构。
模拟从电脑中读写数据
Cpu.java
public class Cpu {
public void useCpu(){
System.out.println("使用cpu");
}
}
Disc.java
public class Disc {
public void useDisc(){
System.out.println("使用硬盘");
}
}
IO.java
public class IO {
public void i(){
System.out.println("读取数据");
}
public void o(){
System.out.println("读出数据");
}
}
Memory.java
public class Memory {
public void useMemory(){
System.out.println("使用内存");
}
}
Computer.java
public class Computer {
private Cpu cpu;
private Disc disc;
private IO io;
private Memory memory;
public Computer(Cpu cpu, Disc disc, IO io, Memory memroy) {
this.cpu = cpu;
this.disc = disc;
this.io = io;
this.memory = memroy;
}
public void getData(){
cpu.useCpu();
io.o();
disc.useDisc();
}
public void setData(){
cpu.useCpu();
io.i();
memory.useMemory();
io.i();
disc.useDisc();
}
}
Test.java
public class Test {
public static void main(String[] args) {
Computer computer = new Computer(
new Cpu(),
new Disc(),
new IO(),
new Memory()
);
System.out.println("读数据");
computer.getData();
System.out.println("\n写数据");
computer.setData();
}
}
以上实例简单描述了外观模式的含义。
在外观模式中使用了一个OO原则:
最少知识原则:只和你的密友谈话
不调用从另一个调用中返回对象的方法,这样做,相当于向另一个对象的子部分发出请求,而本原则要求我们直接对该对象发出请求,
这样一来我们就不需要认识该对象的组件了(让朋友圈子维持在最小状态)。
最少知识原则减少了对象之间的依赖,导致复杂度和开发时间的增加,并降低运行时的性能。
适配器模式和外观模式的区别:
适配器模式的意图是,改变接口符合客户的期望
外观模式的意图是,提供子系统的一个简化接口