【设计模式】 外观模式
系列文章目录
文章目录
- 系列文章目录
- 股民炒股代码
- 投资基金代码
- 外观模式
- 何时使用外观模式
- 总结
本篇文章我们以股民炒股这一事件为例,下面我们来看第一版代码
股民炒股代码
class Stock1{public void sell(){System.out.println("股票1卖出");}public void buy(){System.out.println("股票1买入");}}class Stock2{public void sell(){System.out.println("股票2卖出");}public void buy(){System.out.println("股票2买入");}}class NationalDebt1{public void sell(){System.out.println("国债1卖出");}public class buy(){System.out.println("国债1买入");}}//房地产类class Realty1{public void sell(){System.out.println("房地产1卖出");}public void buy(){System.out.println("房地产1买入");}}public static void main(String[] args) {Stock1 stock1 = new Stock1();Stock1 stock2 = new Stock2();NationalDebt1 nationalDebt1 = new NationalDebt1();Realty1 realty1 = new Realty1();stock1.buy();stock2.buy();nationalDebt1.buy();realty1.buy();stock1.sell();stock2.sell();nationalDebt1.sell();realty1.sell();}
如果我们是投资基金的话,那么就是将我们的钱交给基金来去炒股,此时有第二版代码投资基金代码。
投资基金代码
基金代码如下
//基金类如下class Fund{Stock1 stock1;Stock2 stock2;NationalDebt1 nationalDebt1;Realty1 realty1;public Fund(){stock1 = new Stock1();stock2 = new Stock2();nationalDebt1 = new NationalDebt1();realty1 = new Realty1();}public void buyFund(){stock1.buy();stock2.buy();nationalDebt1.buy();realty1.buy();}public void sellFund(){stock1.sell();stock2.sell();nationalDebt1.sell();realty1.sell();}//基金类可以有很多买入卖出操作,持仓比例等//这里无须告知客户}//客户端public static void main(String[] args){Fund fund1 = new Fund();//基金购买fund1.buyFund();//基金赎回fund1.sellFund();}
外观模式
外观模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
下面是外观模式的代码示例:
//子系统1class SubSystemOne{public void methodOne(){System.out.println("子系统方法一");}}//子系统2class SubSystemTwo{public void methodTwo(){System.out.println("子系统方法二");}}//子系统三class SubSystemThree{public void methodThree(){System.out.println("子系统方法三");}}//子系统四class SubSystemFour{public void methodFour(){System.out.println("子系统方法四");}}//外观类class Facade{SubSystemOne one;SubSystemTwo two;SubSystemThree three;SubSystemFour four;public Facade(){one = new SubSystemOne();two = new SubSystemTwo();three = new SubSystemThree();four = new SubSystemFour();}public void methodA(){one.methodOne();;two.methodTwo();three.methodThree();four.methodFour();}public void methodB(){two.methodTwo();three.methodThree();}}//客户端调用public static void main(String[] args) {Facade facade = new Facade();// 由于Facade的作用,客户端可以根本不知道其他四个子系统类的作用facade.methodA();facade.methodB();}
何时使用外观模式
对于何时使用外观模式,我们要分三个阶段来说
首先,在设计初期阶段,就应该要有意识地将不同的两个层分离, 比如经典的三层架构,就需要考虑在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低,其次,在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂, 大多数的模式使用时也都会产生很多很小的类,这本是好事,但也给外部调用他们的用户程序带来了使用上的困难,增加外观Facade可以提供一个简单的接口,减少他们之间的依赖。第三,在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了, 但因为他包含非常重要的功能,新的需求开发必须要依赖于它,此时用外观模式Facade也是非常合适的,我们可以为新系统开发一个外观类Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统于Facade对象交互,Facade与遗留代码交互所有复杂的工作。
总结
以上就是本文全部内容,本文主要向大家介绍了设计模式中的外观模式,通过炒股代码更改为基金类代码,来引出外观模式代码的大致模板。感谢各位能够看到最后,如有问题,欢迎各位大佬在评论区指正,希望大家可以有所收获!创作不易,希望大家多多支持!