外观模式 ------模拟电脑主机调用其他硬件和软件

  • 在电脑主机(MainFrame)中只需要按下主机的开机按钮(on()),即可调用其它硬件设备和软件的启动方法,如内存(Memory)的自检(check())、CPU的运行(run())、硬盘(HardDisk)的读取(read())、操作系统(OS)的载入(load())等,如果某一过程发生错误则电脑启动失败。使用外观模式模拟该过程,绘制类图并使用Java语言模拟实现。

 

 

Client.java
package Facade;

public class Client {
	public static void main(String args[]) {
		MainFrame mf=new MainFrame();
		System.out.println("电脑启动成功。。。");
		mf.on();
		System.out.println("电脑启动失败。。。");
		mf.off();
	}

}
CPU.java
package Facade;

public class CPU {
	public void run() {
		System.out.println("CPU正在运行");
	}
	public void off() {
		System.out.println("CPU发生错误");
	}

}

HardDisk.java
package Facade;

public class HardDisk {
	public void read() {
		System.out.println("硬盘正在读取");
	}
	public void off() {
		System.out.println("硬盘发生错误");
	}


}
MainFrame.java
package Facade;

public class MainFrame {
	//维持对子系统对象的引用
	private Memory memory;
	private CPU cpu;
	private OS os;
	private HardDisk disk;
	
	public MainFrame() {
		memory=new Memory();
		cpu=new CPU();
		os=new OS();
		disk=new HardDisk();
	}
	
	//调用子系统对象的业务方法
	public void on() {
		memory.check();
		cpu.run();
		os.load();
		disk.read();
	}
	public void off() {
		memory.off();
		cpu.off();
		os.off();
		disk.off();
	}

}
Memory.java
package Facade;

public class Memory {
	public void check() {
		System.out.println("内存正在自检");
	}
	public void off() {
		System.out.println("内存发生错误");
	}


}
OS.java
package Facade;

public class OS {
	public void load() {
		System.out.println("OS正在载入");
	}
	public void off() {
		System.out.println("OS发生错误");
	}


}

 

优点 :

① 简化调用 :简化复杂系统的调用过程 , 无需对子系统进行深入了解 , 即可完成调用 ;

② 降低耦合 :使用外观模式 , 只与外观对象进行交互 , 不与复杂的子系统直接进行交互 , 降低了系统间的依赖 , 使耦合关系更低 ; 子系统内部的模块更容易扩展和维护 ;

③ 层次控制 :层次结构复杂的系统 , 有些方法需要提供给系统外部调用 , 有些方法需要在内部使用,将提供给外部的功能定义在外观类中 , 这样既方便调用 , 也能将系统内部的细节隐藏起来 ;

④ 符合迪米特法则 : 最少知道原则 , 用户不需要了解子系统内部的情况 , 也不需要与子系统进行交互 , 只与外观类进行交互 ; 降低了应用层与子系统之间的耦合度 ;

缺点 :

① 子系统扩展风险 : 系统内部扩展子系统时 , 容易产生风险 ;

② 不符合开闭原则 : 外观模式 , 扩展子系统时 , 不符合开闭原则 ;

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值