六、设计模式——外观模式
六、设计模式——外观模式
文森特梵高 发表于3年前
六、设计模式——外观模式
  • 发表于 3年前
  • 阅读 63
  • 收藏 3
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

摘要: 外观模式:提供统一的高层接口,来访问子系统中一群功能的接口。

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

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

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

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函数调用了众多设备的相关功能,来完成电影院的准备工作。

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



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


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

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



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


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


标签: 外观模式
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 2
博文 24
码字总数 15386
×
文森特梵高
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: