外观(Facade)
意图:
为子系统中的一组接口提供一个一致的界面。Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
个人理解:
一个业务的实现需要多个类共同来参与。则使用外观模式,将其绑定到一个类中,在新的方法中来完成该业务。
类图:
代码:
/** * * @ClassName: Projector * @Description: 子系统之一 Projector * @author 雨ゆこ * @date 2018年5月4日 * @version yuko1.0 */ public class Projector { public void up(){ System.out.println("Project up"); } public void down(){ System.out.println("Project down"); } }
/** * * @ClassName: CD * @Description: 子系统之一 CD * @author 雨ゆこ * @date 2018年5月4日 * @version yuko1.0 */ public class CD { public void on(){ System.out.println("CD on"); } public void off(){ System.out.println("CD off"); } public void play(){ System.out.println("CD play"); } }
/** * * @ClassName: DVD * @Description: 子系统之一 DVD * @author 雨ゆこ * @date 2018年5月4日 * @version yuko1.0 */ public class DVD { public void on(){ System.out.println("DVD on"); } public void off(){ System.out.println("DVD off"); } public void play(){ System.out.println("DVD play"); } }
/** * * @ClassName: Light * @Description: 子系统之一 Light * @author 雨ゆこ * @date 2018年5月4日 * @version yuko1.0 */ public class Light { public void on(){ System.out.println("Light on"); } public void off(){ System.out.println("Light off"); } }
/** * * @ClassName: Facade * @Description: 外观 子系统的高层接口 * @author 雨ゆこ * @date 2018年5月4日 * @version yuko1.0 */ public class Facade { Projector projector = new Projector(); CD cd = new CD(); DVD dvd = new DVD(); Light light = new Light(); public void movie(){ projector.down(); light.off(); dvd.on(); dvd.play(); dvd.off(); light.on(); projector.up(); } }
/** * * @ClassName: Yufan * @Description: 外观模式测试类 * @author 雨ゆこ * @date 2018年5月4日 * @version yuko1.0 */ public class Yufan { public static void main(String[] args) { Facade facade = new Facade(); facade.movie(); } }
测试结果: