zoukankan      html  css  js  c++  java
  • 大话设计模式读书笔记(外观模式)

    人物:大鸟,小菜

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


     外观模式:

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

  • 相关阅读:
    Understanding about Baire Category Theorem
    Isometric embedding of metric space
    Convergence theorems for measurable functions
    Mindmap for "Principles of boundary element methods"
    Various formulations of Maxwell equations
    Existence and uniqueness theorems for variational problems
    Kernels and image sets for an operator and its dual
    [loj6498]农民
    [luogu3781]切树游戏
    [atAGC051B]Three Coins
  • 原文地址:https://www.cnblogs.com/wencheng9012/p/13405405.html
Copyright © 2011-2022 走看看