facade外觀模式
阿新 • • 發佈:2017-05-18
creat ack this 通過 toc 遺留代碼 定義 拓展 create
通過買股票與通過基金買股票引出外觀模式:
package com.disign.facade; /** * Created by zhen on 2017-05-18. */ public class TestStock { public void run1(){ Stock1 gu1 = new Stock1(); Stock2 gu2 = new Stock2(); Stock3 gu3 = new Stock3(); gu1.buy(); gu2.buy(); gu3.buy(); gu1.sell(); gu2.sell(); gu3.sell(); }public void run2(){ Fund fund = new Fund(); fund.buyFund(); fund.sellFund(); } } interface transaction{ public void sell(); public void buy(); } class Stock1 implements transaction{ public void sell(){ } public void buy(){ } } class Stock2 implementstransaction{ public void sell(){ } public void buy(){ } } class Stock3 implements transaction{ public void sell(){ } public void buy(){ } } class Fund{ Stock1 gu1; Stock2 gu2; Stock3 gu3; public void Fund(){ gu1 = new Stock1(); gu2= new Stock2(); gu3 = new Stock3(); } public void buyFund(){ gu1.buy(); gu2.buy(); gu3.buy(); } public void sellFund(){ gu1.sell(); gu2.sell(); gu3.sell(); } }
外觀模式Facade,為系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這一接口使得這一子接口更加容易使用
package com.disign.facade; /** * Created by zhen on 2017-05-18. */ public class TestFacade { public static void main(String[] args){ Facade facade = new Facade(); facade.methodA(); facade.methodB(); } } class SubSystemOne{ public void methodOne(){ } } class SubSystemTwo{ public void methodTwo(){ } } class SubSystemThree{ public void methodThree(){ } } class SubSystemFour{ public void methodFour(){ } } class Facade{ SubSystemOne one; SubSystemTwo two; SubSystemThree three; SubSystemFour four; public Facade(){ this.one = new SubSystemOne(); this.two = new SubSystemTwo(); this.three = new SubSystemThree(); this.four = new SubSystemFour(); } public void methodA(){ System.out.println("方法組A()"); one.methodOne(); two.methodTwo(); four.methodFour(); } public void methodB(){ System.out.println("方法組B()"); two.methodTwo(); three.methodThree(); } }
何時使用外觀模式?
首先,在設計初期階段,應該要有意識的將不同的兩個層分離,比如經典的三層架構,就需要考慮在數據訪問層和業務邏輯層、業務邏輯層和表示層的層與層之間建立外觀Facade。
其次,在開發階段,子系統往往應為不斷的重構演化而變得越來越復雜,增加外觀Facade可以提供一個簡單的接口,減少它們之間的依賴
在維護一個遺留的大型系統時,可能這個系統已經非常難以維護和拓展了,此時使用外觀也是非常合適的。為新系統開發一個外觀Facade類,提供遺留代碼的額比較清晰的簡單的接口,讓新系統與Facade對象交互,Facade與遺留代碼交互所有復雜的工作。
facade外觀模式