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

  • 相关阅读:
    TP框架模板中IF Else 如何使用?
    Append 后如何使用 fadein淡入效果
    ThinkPad如何修改fn键默认操作
    TP框架ajax U方法不解析怎么办?
    thinkphp session如何取数组
    FTP服务搭建
    Linux系统学习之字符处理
    如何使用zabbix初级监控
    项目同步部署
    巡检常用命令
  • 原文地址:https://www.cnblogs.com/wencheng9012/p/13405405.html
Copyright © 2011-2022 走看看