设计模式:外观模式(Facade Pattern)

外观模式

外观模式又叫门面模式,提供一个统一的接口,来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

这里我们使用观看电影的实例,我们假设观看一部影片(watchMovie())的步骤:1.投影开2.幕布放下3.DVD播放4.音响打开;结束放映(closed())的操作应该是反过来的

实践步骤:

1>我们新建一个投影机(Diascope)类、幕布(Curtain)类、DVD类、音响(Sounder)类

package com.kaishengit.facade;

public class Diascope {
	public void on(){
		System.out.println("投影开");
	}
	public void off(){
		System.out.println("投影关");
	}
}
package com.kaishengit.facade;

public class Curtain {
	public void put(){
		System.out.println("幕布放下");
	}
	public void get(){
		System.out.println("幕布收起来");
	}
}
package com.kaishengit.facade;

public class Dvd {
	public void play(){
		System.out.println("DVD播放");
	}
	
	public void close(){
		System.out.println("DVD关闭");
	}
}
package com.kaishengit.facade;

public class Sounder {
	public void on(){
		System.out.println("音响打开");
	}
	public void off(){
		System.out.println("音响关闭");
	}
}

2>我们新建一个外观(Facade)类

package com.kaishengit.facade;


public class Facade {
	private Diascope diascope;
	private Curtain curtain;
	private Dvd dvd;
	private Sounder sounder;
	
	/**
	 * 通过构造方法分别传入投影仪、幕布、Dvd、音响对象
	 * @param diascope
	 * @param curtain
	 * @param dvd
	 * @param sounder
	 */
	public Facade(Diascope diascope,Curtain curtain,Dvd dvd,Sounder sounder){
		this.diascope = diascope;
		this.curtain  = curtain;
		this.dvd = dvd;
		this.sounder = sounder;
	}
	
	/**
	 * 观看影片
	 */
	public void watchMovie(){
		diascope.on();//投影开
		curtain.put();//幕布放下
		dvd.play();//Dvd播放
		sounder.on();//音响打开
	}
	/**
	 * 结束放映
	 */
	public void closed(){
		sounder.off();//音响关闭
		dvd.close();//Dvd关闭
		curtain.get();//幕布拉上
		diascope.off();//投影关闭
	}
	
	
}

3>我们测试一下

package com.kaishengit.facade;

public class Test {
	public static void main(String[] args) {
		Facade facade = new Facade(new Diascope(), new Curtain(), new Dvd(), new Sounder());
		facade.watchMovie();//观看放映
		//facade.closed();//结束放映
	}
}

 运行结果:

-------------------------------

投影开

幕布放下

DVD播放

音响打开

-------------------------------

关于外观模式

1>当需要简化并统一一个很大的接口或者一群复杂的接口时,应该使用外观模式

2>外观将客户从一个复杂的子系统中解耦

3>实现一个外观,需要将子系统组合进外观中,然后将工作委托给子系统完成

4>你可以为子系统实现一个以上的外观

5>适配器模式重点在于转换,外观模式重点在于简化

-------end-----------

猜你喜欢

转载自meigesir.iteye.com/blog/1504881