外观模式
案例
使用外观模式模拟《Java 设计模式》教材 187 页第 5 题
外观
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
public class MainFrame {
private Memory memory; private CPU cpu; private HardDisk disk; private OS os;
public MainFrame() { this.memory = new Memory(); this.cpu = new CPU(); this.disk = new HardDisk(); this.os = new OS(); }
public void on() { memory.check(); cpu.run(); disk.read(); os.load(); } }
|
子系统类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
public class Memory {
public Memory() { System.out.println("内存已被调用"); }
public void check() { System.out.println("正在自检内存!"); } }
public class CPU {
public CPU() { System.out.println("CPU已被调用"); }
public void run() { System.out.println("正在运行CPU!"); } }
public class HardDisk { public HardDisk() { System.out.println("硬盘已被调用"); }
public void read() { System.out.println("正在读取硬盘!"); } }
public class OS { public OS() { System.out.println("操作系统已被调用!"); }
public void load() { System.out.println("正在载入操作系统!"); } }
|
客户端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
public class Client { public static void main(String[] args) { MainFrame mainFrame = new MainFrame(); try { mainFrame.on(); } catch (Exception e) { e.toString(); } } }
|
小结
角色
特点
对外有一个统一接口,外部应用程序不用关心内部子系统的具体细节,大大降低应用程序的复杂度,提高了程序的可维护性
优点
-
对客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使子系统更为易用
-
实现了子系统与客户端之间的松耦合关系,使得子系统的变化不会影响到调用它的客户端,只需要调整外观类即可
-
一个子系统的修改对其他子系统无任何影响,且子系统内部变化不会影响到外观对象
缺点
适用环境