1. 程式人生 > >facade外觀模式

facade外觀模式

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 implements
transaction{ 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外觀模式