大话设计模式,让你的代码更完美7---外观模式
2017-05-11 13:52
218 查看
外观模式:为子系统的一组接口提供一个一致的界面,此模式定义了一个高层接口,该接口使得这一子系统更加容易使用。
这一模式是最最最常用到的和见到的设计模式。
需求:股民投资购买股票、期货、国债等等
菜鸟代码:
对于菜鸟来言,所有的行为都需要自己(主函数)去操作,买股票,卖股票,买期货,买期货等等。。。。
对于老鸟来言,既然都要操作完全可以进行包装一下,将各个投资都封装到Fund中,然后统一进行买卖操作,在这里股票投资可以用到之前的克隆哦,
也可以用到代理proxy(让基金管理人管理),也可以用到工厂模式。
暂且不提上述的操作,相对客户端来言,我不需要知道谁做的,怎么做的,我只需要看到你买卖就OK
所以相对于外观类fund类而言,他需要了解所有子系统(股票、期货)的方法和属性,然后进行组合,以备客户端调用。
结构图对比:
总结:在设计初期,要有意识的将不同的两个层分离(三层架构),在层与层之间建立外观模式,降低之间耦合性。
因为开发阶段子系统(买卖股票/期货)往往不断的进行重构演化而更加复杂,使用外观模式可以减少两者间依赖。
比如:主函数是A系统,股票买卖是C系统,期货买卖是D系统,如果之间互联,A,C,D系统的任意一方变更都会导致另一方代码的大量修改,
使用外观模式Facade则可以使各系统之间清晰交互,如图
这一模式是最最最常用到的和见到的设计模式。
需求:股民投资购买股票、期货、国债等等
菜鸟代码:
//股票1 class Stock1 { //卖股票 public void Sell() { Console.WriteLine(" 股票1卖出"); } //买股票 public void Buy() { Console.WriteLine(" 股票1买入"); } } //股票2 class Stock2 { //卖股票 public void Sell() { Console.WriteLine(" 股票2卖出"); } //买股票 public void Buy() { Console.WriteLine(" 股票2买入"); } } //国债1 class NationalDebt1 { //卖国债 public void Sell() { Console.WriteLine(" 国债1卖出"); } //买国债 public void Buy() { Console.WriteLine(" 国债1买入"); } }主函数:
static void Main(string[] args) { Stock1 gu1 = new Stock1(); Stock2 gu2 = new Stock2(); Stock3 gu3 = new Stock3(); NationalDebt1 nd1 = new NationalDebt1(); gu1.Buy(); gu2.Buy(); nd1.Buy(); gu1.Sell(); gu2.Sell(); nd1.Sell(); Console.Read(); } }老鸟代码:
class Fund { Stock1 gu1; Stock2 gu2; Stock3 gu3; NationalDebt1 nd1; Realty1 rt1; public Fund() { gu1 = new Stock1(); gu2 = new Stock2(); nd1 = new NationalDebt1(); } public void BuyFund() { gu1.Buy(); gu2.Buy(); nd1.Buy(); } public void SellFund() { gu1.Sell(); gu2.Sell(); nd1.Sell(); } }主函数:
static void Main(string[] args) { Fund jijin = new Fund(); jijin.BuyFund(); jijin.SellFund(); Console.Read(); }
对于菜鸟来言,所有的行为都需要自己(主函数)去操作,买股票,卖股票,买期货,买期货等等。。。。
对于老鸟来言,既然都要操作完全可以进行包装一下,将各个投资都封装到Fund中,然后统一进行买卖操作,在这里股票投资可以用到之前的克隆哦,
也可以用到代理proxy(让基金管理人管理),也可以用到工厂模式。
暂且不提上述的操作,相对客户端来言,我不需要知道谁做的,怎么做的,我只需要看到你买卖就OK
所以相对于外观类fund类而言,他需要了解所有子系统(股票、期货)的方法和属性,然后进行组合,以备客户端调用。
结构图对比:
总结:在设计初期,要有意识的将不同的两个层分离(三层架构),在层与层之间建立外观模式,降低之间耦合性。
因为开发阶段子系统(买卖股票/期货)往往不断的进行重构演化而更加复杂,使用外观模式可以减少两者间依赖。
比如:主函数是A系统,股票买卖是C系统,期货买卖是D系统,如果之间互联,A,C,D系统的任意一方变更都会导致另一方代码的大量修改,
使用外观模式Facade则可以使各系统之间清晰交互,如图
相关文章推荐
- 我与大话设计模式之代码篇(四)-----外观模式
- 大话设计模式,让你的代码更完美11---状态模式
- 大话设计模式,让你的代码更完美3---代理模式
- 《大话设计模式》ruby版代码:外观模式
- 大话设计模式,让你的代码更完美6---模版方法模式/迪米特
- 大话设计模式,让你的代码更完美2---嵌套装饰模式
- 大话设计模式,让你的代码更完美8---建造者模式
- 大话设计模式,让你的代码更完美9---旁观者模式
- 《大话设计模式》读书笔记(C++代码实现) 第六章:装饰模式
- 大话设计模式之策略模式代码
- 大话设计模式之外观模式
- 大话设计模式之外观模式
- 《大话设计模式》读书笔记(C++代码实现) 第二章:策略模式
- 大话设计模式_外观模式
- 大话设计模式之外观模式
- 《大话设计模式》之--第1章 代码无错就是优?----简单工厂模式
- 大话设计模式之外观模式
- 大话设计模式中简单工厂模式和策略模式的商场收银软件实例的C++代码
- 《大话设计模式》读书笔记(C++代码实现) 第七章:代理模式