設計模式--外觀模式
阿新 • • 發佈:2017-07-30
通過 stc 我們 使用 客戶端 不同的 test ace log
例如 你到政府部門去辦事情,你需要到部門1辦事情,然後再去部門2去辦事情,後面有了一站式窗口之後,你只需要把表交給一站式窗口。一站式窗口在去部門1和部門2去辦事情,客戶不用和模塊a和b打交道
案例2:
客戶要自己組裝電腦,客戶需要自己去買cpu 去買電源 去買風扇燈,然後把電腦裝起來,相當的麻煩
客戶其實只要把電腦需要的配置告訴給電腦裝修公司,由裝電腦公司去把電腦裝好
我們來看一個簡單的外觀模式的案例:
package cn.javass.dp.facade.example2; /** * A模塊的接口 */ public interface AModuleApi { /** * 示意方法,A模塊對外的一個功能方法*/ public void testA(); }
package cn.javass.dp.facade.example2; public class AModuleImpl implements AModuleApi{ public void testA() { System.out.println("現在在A模塊裏面操作testA方法"); } }
package cn.javass.dp.facade.example2; public interface BModuleApi { public void testB(); }、
package cn.javass.dp.facade.example2; public class BModuleImpl implements BModuleApi{ public void testB() { System.out.println("現在在B模塊裏面操作testB方法"); } }
package cn.javass.dp.facade.example2; public interface CModuleApi { public void testC(); }
package cn.javass.dp.facade.example2;public class CModuleImpl implements CModuleApi{ public void testC() { System.out.println("現在在C模塊裏面操作testC方法"); } }
package cn.javass.dp.facade.example2; /** * 外觀對象 */ public class Facade { /** * 示意方法,滿足客戶需要的功能 */ public void test(){ //在內部實現的時候,可能會調用到內部的多個模塊 AModuleApi a = new AModuleImpl(); a.testA(); BModuleApi b = new BModuleImpl(); b.testB(); CModuleApi c = new CModuleImpl(); c.testC(); } }
package cn.javass.dp.facade.example2; public class Client { public static void main(String[] args) { // //不用Facade,需要自己跟多個模塊交互 // AModuleApi a = new AModuleImpl(); // a.testA(); // BModuleApi b = new BModuleImpl(); // b.testB(); // CModuleApi c = new CModuleImpl(); // c.testC(); // // System.out.println("使用Facade----------------------〉"); //使用了Facade new Facade().test(); } }
所謂的設計模式的本質就是有了接口,有了接口的具體實現類,然後才有設計模式,例如簡單工廠模式,有了業務接口,有課業務接口的具體實現類,然後才引入工廠模式,工廠模式能夠依據客戶的參數需求,選擇不同的具體現實類。
外觀模式本質上也是一樣的,通過外觀模式來實現用戶的需求
註意點:facade需要知道系統內部的模塊a,模塊b,facade屏蔽了系統內部和客戶端的關系,當系統內部的模塊功能發送改變的時候,客戶端是不知道的,例如裝修電腦,轉機公司要到去買電源,裝機公司需要去買cpu,客戶不直接和cpu公司這些打交道
設計模式--外觀模式