博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
外观模式
阅读量:4668 次
发布时间:2019-06-09

本文共 2419 字,大约阅读时间需要 8 分钟。

Facade外观模式,是一种结构型模式,它主要解决的问题是:组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。在这里我想举一个例子:比如,现在有一辆汽车,我们(客户程序)要启动它,那我们就要发动引擎(子系统1),使四个车轮(子系统2)转动。但是实际中我们并不需要用手推动车轮使其转动,我们踩下油门,此时汽车再根据一些其他的操作使车轮转动。油门就好比系统给我们留下的接口,不论汽车是以何种方式转动车轮,车轮变化成什么牌子的,我们要开走汽车所要做的还是踩下油门。

GoF《设计模式》中说道:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

代码1:各种子组件

//股票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买入");        }    }    //股票3    class Stock3    {        //卖股票        public void Sell()        {            Console.WriteLine(" 股票3卖出");        }        //买股票        public void Buy()        {            Console.WriteLine(" 股票3买入");        }    }    //国债1    class NationalDebt1    {        //卖国债        public void Sell()        {            Console.WriteLine(" 国债1卖出");        }        //买国债        public void Buy()        {            Console.WriteLine(" 国债1买入");        }    }    //房地产1    class Realty1    {        //卖房地产        public void Sell()        {            Console.WriteLine(" 房产1卖出");        }        //买房地产        public void Buy()        {            Console.WriteLine(" 房产1买入");        }    }

代码2:聚合子组件的外观组件

class Fund    {        Stock1 gu1;        Stock2 gu2;        Stock3 gu3;        NationalDebt1 nd1;        Realty1 rt1;        public Fund()        {            gu1 = new Stock1();            gu2 = new Stock2();            gu3 = new Stock3();            nd1 = new NationalDebt1();            rt1 = new Realty1();        }        public void BuyFund()        {            gu1.Buy();            gu2.Buy();            gu3.Buy();            nd1.Buy();            rt1.Buy();        }        public void SellFund()        {            gu1.Sell();            gu2.Sell();            gu3.Sell();            nd1.Sell();            rt1.Sell();        }    }

代码3:客户端代码

class Program    {        static void Main(string[] args)        {            Fund jijin = new Fund();            jijin.BuyFund();            jijin.SellFund();            Console.Read();        }    }

  

转载于:https://www.cnblogs.com/wuMing-dj/p/3358899.html

你可能感兴趣的文章
http => https 升级
查看>>
Window 分布式学习-好文收藏
查看>>
Android TextUtils类介绍
查看>>
linux echo设置颜色
查看>>
英文参考文献标准格式:论文参考文献格式规范(转载)
查看>>
css div框加小箭头
查看>>
Eclipse快捷键与使用技巧总结
查看>>
Solr4.8.0源码分析(16)之SolrCloud索引深入(3)
查看>>
PEP8 - Python编码规范
查看>>
div放置图片总结
查看>>
FZOJβ #45. 染色问题
查看>>
Python之SYS模块
查看>>
webapi文件上传和下载
查看>>
HDU 1540 Tunnel Warfare [二分 + 线段树]
查看>>
C++:构造函数和析构函数能否为虚函数
查看>>
win7便笺元数据损坏,最新解决办法
查看>>
mongod
查看>>
vim配置python高亮和缩进
查看>>
Spring3.0.5 获取表中自增的主键(mysql)
查看>>
delphi dxBarManager 的dxBarEdit 输入问题
查看>>