六、设计模式——外观模式

一个系统对外提供功能,需要许多子系统配合。外观模式在高层系统中通过调动多个子系统的功能来完成一个功能模式。

比如,一个家庭影院看电影,需要各种设备工作才能开始。

六、设计模式——外观模式_第1张图片

家庭影院运行起来,提供观看功能,需要启动爆米花机、放下屏幕、开投影仪...等等

public class Popcorn {
	private static Popcorn instance = null;
	private Popcorn() {
	}
	public static Popcorn getInstance() {
		if (instance == null) {
			instance = new Popcorn();
		}
		return instance;
	}
	public void on() {
		System.out.println("Popcorn On");
	}
	public void off() {
		System.out.println("Popcorn Off");
	}
	public void pop() {
		System.out.println("Popcorn is popping");
	}
}
//其他类省略
//.....略......

public class HomeTheaterFacade {
	private TheaterLights mTheaterLights;
	private Popcorn mPopcorn;
	private Stereo mStereo;
	private Projector mProjector;
	private Screen mScreen;
	private DVDPlayer mDVDPlayer;

	public HomeTheaterFacade() {
		mTheaterLights = TheaterLights.getInstance();
		mPopcorn = Popcorn.getInstance();
		mStereo = Stereo.getInstance();
		mProjector = Projector.getInstance();
		mScreen = Screen.getInstance();
		mDVDPlayer = DVDPlayer.getInstance();
	}

	public void ready() {
		mPopcorn.on();
		mPopcorn.pop();
		mScreen.down();
		mProjector.on();
		mStereo.on();
		mDVDPlayer.on();
		mDVDPlayer.setdvd();
		mTheaterLights.dim(10);
	}

	public void end() {
		mPopcorn.off();
		mTheaterLights.bright();
		mScreen.up();
		mProjector.off();
		mStereo.off();
		
		mDVDPlayer.setdvd();
		mDVDPlayer.off();
		
	}

	public void play() {
		mDVDPlayer.play();
	}

	public void pause() {
		mDVDPlayer.pause();
	}
}

ready函数调用了众多设备的相关功能,来完成电影院的准备工作。

这样能达到系统对外界解耦的效果。


外观模式与命令模式 的 区别

外观模式是一个系统提供对外功能的简化。

命令模式是为了将功能封装成命令。


最小知道原则——你知道太多了

尽量减少对象之间的交互,为了解耦。


你可能感兴趣的:(外观模式)