在电脑主机(MainFrame)中只需要按下主机的开机按钮(on()),即可调用其它硬件设备和软件的启动方法,如内存(Memory)的自检(check())、CPU的运行(run())、硬盘(Hard

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

UML类图
在电脑主机(MainFrame)中只需要按下主机的开机按钮(on()),即可调用其它硬件设备和软件的启动方法,如内存(Memory)的自检(check())、CPU的运行(run())、硬盘(Hard_第1张图片

package com.zheng;

public class MainFrame {
	private Memory memory=new Memory();		//关联关系建立联系
	private Cpu cpu=new Cpu();
	private HardDisk harddisk=new HardDisk();
	private Os os=new Os();
	
	public void fun() {
		memory.display();
		cpu.display();
		harddisk.display();
		os.display();
		System.out.println("开机正常");
		
	}

}


package com.zheng;

public class Memory {
	public void display() {
		System.out.println("1、内存正常");
	}

}


package com.zheng;

public class Cpu {
	public void display() {
		System.out.println("2、cpu运行正常");
	}


}

package com.zheng;

public class HardDisk {
	public void display() {
		System.out.println("3、硬盘读取正常");
	}


}

package com.zheng;

public class Os {
	public void display() {
		System.out.println("4、操作系统载入正常");
	}


}

package com.zheng;

import java.util.Scanner;

public class Client {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		while (true) {

			MainFrame f = new MainFrame();
			Scanner scan = new Scanner(System.in);
			System.out.println("请输入ON进行开机:");
			String str = scan.nextLine();
			if (str.equals("ON")) {
				f.fun();
			} else {
				System.out.println("输入的信息有误!!!请重新输入");
			}
		}
	}

}

优点:1、实现了子系统和客户端之间的松耦合关系,这使得子系统的变化不会影响到调用它的客户端,只需要调整外观模式就可以。2、一个子系统的修改对其他子系统没有任何影响。3、对客户端屏蔽了子系统的组件,减少了客户端所需处理的对象数目。
缺点:1、如果设计不当、增加新的子系统可能需要修改外观类的源代码,违反了开闭原则。2、不能很好的限制客户端直接使用子系统类。

你可能感兴趣的:(java,设计模式)