外观模式(也叫做门面模式):
影院管理项目:
外观模式的基本介绍:
外观模式的原理类图:
原理类图的说明(外观模式的角色)
1)外观类(Facade):为调用端提供统一的调用接口,外观类知道哪些子系统负责处理请求,从而将调用端的请求代理给适当的子系统对象。
2)调用者(Client):外观接口的调用者。
3)子系统的集合:指模块或者子系统,处理Facade对象指派的任务,他是功能实际的提供者。
代码实现:
package com.sky.facade;
public class DVDPlayer {
//单例模式 饿汉式 private static DVDPlayer dvdPlayer = new DVDPlayer();
/** * 私有化五参数构造方法 */ private DVDPlayer(){
}
/** * 提供全局唯一的访问点 * */ public static DVDPlayer getInstance(){ return dvdPlayer; }
/** * DVD的操作方法 */
//打开 public void open(){ System.out.println("DVD开机。。。"); } //关机 public void close(){ System.out.println("DVD关机。。。"); } //播放 public void play(){ System.out.println("播放影片。。。"); } //暂停 public void pause(){ System.out.println("DVD暂停。。。"); } //使用操作 public void option(){ System.out.println("DVD使用操作。。。"); }
}
|
package com.sky.facade;
//灯光设备; public class Lamplight {
private static Lamplight lamplight = new Lamplight(); //使用单例模式之饿汉式; private Lamplight(){
}
public static Lamplight getInstance(){ return lamplight; }
//管理灯光; public void openLamp(){ System.out.println("开灯"); }
//将灯光变暗 public void dim(){ System.out.println("灯光变暗"); }
public void closeLamp(){ System.out.println("关灯"); } }
|
package com.sky.facade;
/** * 爆米花机 */ public class PopCorn {
public static PopCorn popCorn = new PopCorn();
private PopCorn(){
}
public static PopCorn getInstance(){ return popCorn; }
/** * 爆米花设备操作 */ public void openPop(){ System.out.println("爆米花设备开机。。。"); }
public void closePop(){ System.out.println("爆米花设备关机。。。"); }
public void pop(){ System.out.println("取爆米花。。。"); } }
|
package com.sky.facade;
/** * 外观类(界面类) */ public class TheatreFacade {
//管理多个设备 private DVDPlayer dvdPlayer; private Lamplight lamplight; private PopCorn popCorn;
public TheatreFacade(){ super(); this.dvdPlayer = DVDPlayer.getInstance(); this.lamplight = Lamplight.getInstance(); this.popCorn = PopCorn.getInstance(); }
//观看电影前的准备 public void ready(){ //开DVD,爆米花机,灯光 dvdPlayer.open(); popCorn.openPop(); lamplight.openLamp(); }
//观看电影中的准备 public void play(){ dvdPlayer.play(); lamplight.dim(); }
//观影后的管理 public void finish(){ //关闭DVD,关闭爆米花机,关闭灯光 dvdPlayer.close(); popCorn.closePop(); lamplight.closeLamp(); }
}
|
package com.sky.facade;
/** * 客户端 */ public class Client {
public static void main(String[] args) { //在客户端,只需要引用界面类就可以了 TheatreFacade facade = new TheatreFacade(); facade.ready(); System.out.println("======================="); facade.play(); System.out.println("======================="); facade.finish(); }
}
|
运行结果:
DVD开机。。。
爆米花设备开机。。。
开灯
=======================
播放影片。。。
灯光变暗
=======================
DVD关机。。。
爆米花设备关机。。。
关灯
|
外观模式的注意事项和细节