设计模式---外观模式

外观模式

  • 外观模式也叫过程模式,外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一字系统更加容易使用
  • 外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需要跟这个接口发生调用,而无需关心这个子系统的内部细节
外观模式的角色
  • 外观类(Facade):为调用者提供统一的调用接口,外观类知道哪些子系统负责处理请求,从而将调用端的请求代理给适当的子系统对象
  • 调用者(Client):外观接口的调用者
  • 子系统的集合:模块或子系统,处理Facade对象指派的任务,是功能的实际提供者

示例

比如一个影院管理任务,有投影仪、DVD、屏幕等等,这些都分别需要一个遥控器去控制

DVDPlayer 类:

public class DVDPlayer {
	
	//使用单例模式, 使用饿汉式
	private static DVDPlayer instance = new DVDPlayer();
	
	public static DVDPlayer getInstanc() {
		return instance;
	}
	
	public void on() {
		System.out.println(" dvd on ");
	}
	public void off() {
		System.out.println(" dvd off ");
	}
	
	public void play() {
		System.out.println(" dvd is playing ");
	}
	
	//....
	public void pause() {
		System.out.println(" dvd pause ..");
	}
}

投影仪Projector类:

public class Projector {

	private static Projector instance = new Projector();
	
	public static Projector getInstance() {
		return instance;
	}
	
	public void on() {
		System.out.println(" Projector on ");
	}
	
	public void off() {
		System.out.println(" Projector ff ");
	}
	
	public void focus() {
		System.out.println(" Projector is Projector  ");
	}
	
	//...
}

屏幕Screen类:

public class Screen {

	private static Screen instance = new Screen();
	
	public static Screen getInstance() {
		return instance;
	}
	
	public void up() {
		System.out.println(" Screen up ");
	}
	
	public void down() {
		System.out.println(" Screen down ");
	}
}

外观类:

public class HomeTheaterFacade {
	//定义各个子系统对象
	private DVDPlayer dVDPlayer;
	private Projector projector;
	private Screen screen;
	
	//构造器
	public HomeTheaterFacade() {
		this.dVDPlayer = DVDPlayer.getInstanc();
		this.projector = Projector.getInstance();
		this.screen = Screen.getInstance();
	}

	//准备开始
	public void ready() {
		screen.down(); //放下屏幕
		projector.on(); //打开投影仪
		dVDPlayer.on(); //打开DVD
	}
	
	//播放
	public void play() {
		dVDPlayer.play();
	}
	
	//暂停
	public void pause() {
		dVDPlayer.pause();
	}
	
	//结束
	public void end() {
		screen.up();   //屏幕放上去
		projector.off();  //关闭投影仪
		dVDPlayer.off();  //关闭DVD
	}
}

客户端:

public class Client {
	public static void main(String[] args) {
		HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade();
		homeTheaterFacade.ready();
		homeTheaterFacade.play();
		homeTheaterFacade.end();
	}
}

可以看到,使用外观模式的方式只给用户提供基本的接口,至于准备阶段具体需要打开那些电子设备,客户端不用去关心。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值