facade外观模式

通过买股票与通过基金买股票引出外观模式:

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与遗留代码交互所有复杂的工作。

原文地址:https://www.cnblogs.com/aigeileshei/p/6873035.html