`
linsea
  • 浏览: 87958 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

外观模式

阅读更多
* 外观模式定义:
* 它提供一个统一的接口,用来访问子系统中的一群接口.
* 外观定义了一个高层接口,让子系统更容易使用.
*
* OO原则:"最少知识(Least Knowledge)"原则
* 即我们要减少对象之间的交互,只留下几个"密友".
* 只和你的密友谈话.
*
* 如何不要赢得太多的朋友和影响太多的对象?
* 此原则提供的方针:
* 就任何对象而言,在该对象的方法内,我们只应该调用属于以下范围的方法:
* 1.该对象本身
* 2.被当做方法的参数而传递进来的对象
* 3.此方法所创建或实例化的任何对象
* 4.对象的任何组件(类的字段所引用的对象)
*
* 最少知识原则的优点:减少对象之间依赖,减少软件维护成本.
* 缺点:会导致更多的"包装"类被制造出来,以处理和其他组件的沟通,
* 这可能会导致复杂度和开发时间的增加,并降低运行时的性能.
package desginpattern.facade;
/**
 * 外观模式核心类!
 * 外观模式定义:
 * 它提供一个统一的接口,用来访问子系统中的一群接口.
 * 外观定义了一个高层接口,让子系统更容易使用.
 *
 * OO原则:"最少知识(Least Knowledge)"原则
 * 即我们要减少对象之间的交互,只留下几个"密友".
 * 只和你的密友谈话.
 *
 * 如何不要赢得太多的朋友和影响太多的对象?
 * 此原则提供的方针:
 * 就任何对象而言,在该对象的方法内,我们只应该调用属于以下范围的方法:
 * 1.该对象本身
 * 2.被当做方法的参数而传递进来的对象
 * 3.此方法所创建或实例化的任何对象
 * 4.对象的任何组件(类的字段所引用的对象)
 * 
 * 最少知识原则的优点:减少对象之间依赖,减少软件维护成本.
 * 缺点:会导致更多的"包装"类被制造出来,以处理和其他组件的沟通,
 * 这可能会导致复杂度和开发时间的增加,并降低运行时的性能.
 */
public class HomeTheaterFacade {
	Amplifier amp;
	Tuner tuner;
	DvdPlayer dvd;
	CdPlayer cd;
	Projector projector;
	TheaterLights lights;
	Screen screen;
	PopcornPopper popper;
 
	public HomeTheaterFacade(Amplifier amp, 
				 Tuner tuner, 
				 DvdPlayer dvd, 
				 CdPlayer cd, 
				 Projector projector, 
				 Screen screen,
				 TheaterLights lights,
				 PopcornPopper popper) {
 
		this.amp = amp;
		this.tuner = tuner;
		this.dvd = dvd;
		this.cd = cd;
		this.projector = projector;
		this.screen = screen;
		this.lights = lights;
		this.popper = popper;
	}
 
	public void watchMovie(String movie) {
		System.out.println("Get ready to watch a movie...");
		popper.on();
		popper.pop();
		lights.dim(10);
		screen.down();
		projector.on();
		projector.wideScreenMode();
		amp.on();
		amp.setDvd(dvd);
		amp.setSurroundSound();
		amp.setVolume(5);
		dvd.on();
		dvd.play(movie);
	}
 
 
	public void endMovie() {
		System.out.println("Shutting movie theater down...");
		popper.off();
		lights.on();
		screen.up();
		projector.off();
		amp.off();
		dvd.stop();
		dvd.eject();
		dvd.off();
	}

	public void listenToCd(String cdTitle) {
		System.out.println("Get ready for an audiopile experence...");
		lights.on();
		amp.on();
		amp.setVolume(5);
		amp.setCd(cd);
		amp.setStereoSound();
		cd.on();
		cd.play(cdTitle);
	}

	public void endCd() {
		System.out.println("Shutting down CD...");
		amp.off();
		amp.setCd(cd);
		cd.eject();
		cd.off();
	}

	public void listenToRadio(double frequency) {
		System.out.println("Tuning in the airwaves...");
		tuner.on();
		tuner.setFrequency(frequency);
		amp.on();
		amp.setVolume(5);
		amp.setTuner(tuner);
	}

	public void endRadio() {
		System.out.println("Shutting down the tuner...");
		tuner.off();
		amp.off();
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics