大话设计模式读书笔记(外观模式)

人物:大鸟,小菜

事件:小菜与大鸟谈起了炒股,大鸟就借着炒股里股票和基金的概念给小菜谈起了外观模式


 外观模式:

1.借用炒股的股票和基金简单阐述外观模式

2.对外观模式进行小结

小菜先设计股民炒股的代码

设计思路如图:

股票1:

@Slf4j
public class Stock1 {
    /**
     * 卖股票1
     */
    public void sell() {
        log.info("股票1卖出");
    }

    /**
     * 买股票1
     */
    public void buy() {
        log.info("股票1买入");
    }
}

股票2:

@Slf4j
public class Stock2 {
    /**
     * 卖股票2
     */
    public void sell() {
        log.info("股票2卖出");
    }

    /**
     * 买股票1
     */
    public void buy() {
        log.info("股票2买入");
    }
}

国债1:

@Slf4j
public class NationalDebt1 {
    /**
     * 卖国债1
     */
    public void sell() {
        log.info("国债1卖出");
    }

    /**
     * 买国债1
     */
    public void buy() {
        log.info("国债1买入");
    }
}

房地产1:

@Slf4j
public class Realty1 {
    /**
     * 卖房地产1
     */
    public void sell() {
        log.info("房地产1卖出");
    }

    /**
     * 买房地产1
     */
    public void buy() {
        log.info("房地产1买入");
    }
}

客户端调用:

public class Stock {
    public static void main(String[] args) {
        Stock1 gu1 = new Stock1();
        Stock2 gu2 = new Stock2();
        NationalDebt1 nd1 = new NationalDebt1();
        Realty1 rt1 = new Realty1();

        gu1.buy();
        gu2.buy();
        nd1.buy();
        rt1.buy();

        gu1.sell();
        gu2.sell();
        nd1.sell();
        rt1.sell();
    }
}

再加上基金投资代码

设计思路如图:

基金类:

public class Fund {
    Stock1 gu1;
    Stock2 gu2;
    NationalDebt1 nd1;
    Realty1 rt1;

    public Fund() {
        gu1 = new Stock1();
        gu2 = new Stock2();
        nd1 = new NationalDebt1();
        rt1 = new Realty1();
    }

    public void buyFund() {
        gu1.buy();
        gu2.buy();
        nd1.buy();
        rt1.buy();
    }

    public void sellFund() {
        gu1.sell();
        gu2.sell();
        nd1.sell();
        rt1.sell();
    }
}

客户端调用:

public static void main(String[] args) {
    Fund jijin = new Fund();
    //基金购买
    jijin.buyFund();
    //基金赎回
    jijin.sellFund();
}

外观模式

1.概念:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用

2.外观模式UML图:

3.外观模式使用时机:

  (1)在设计阶段初期时,有意识将不同的两个层分离,比如经典的三层架构(就需要在数据访问层和业务逻辑层,业务逻辑层和表示层的层与层之间建立外观facade,这样可以为复杂的系统提供一个简单的接口,降低耦合)

  (2)在开发阶段时,子系统往往因为不断重构演化而变得复杂,会增加很多很小的类,虽然是好事,但也会给外部调用它们的用户带来使用上的困难,而增加外观facade可以提供一个简单的接口,减少它们之间的依赖

  (3)在维护一个大型遗留系统时,可能这个系统已经非常难以维护和扩展了,但因为它包含着非常重要的功能,新的需求必须依赖它,这时外观facade也是非常必要的,你可以为新系统开发一个外观facade类,让新系统与facade交互,facade与遗留系统交互所有复杂的工作

原文地址:https://www.cnblogs.com/wencheng9012/p/13405405.html