人物:大鸟,小菜
事件:小菜与大鸟谈起了炒股,大鸟就借着炒股里股票和基金的概念给小菜谈起了外观模式
外观模式:
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与遗留系统交互所有复杂的工作