外观模式
2016-01-10 10:46
141 查看
外观模式
定义:外观模式(Facade),为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。
结构:Façade:这个外观类为子系统提供一个共同的对外接口
Clients:客户对象通过一个外观接口读写子系统中各接口的数据资源。
客户类和子系统:
适用:
(1)设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。
(2) 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。
(3) 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。
优点:(1)实现了子系统与客户端之间的松耦合关系。
(2)客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。
缺点:如果增加新的子系统可能需要修改外观类或客户端的源代码,这样就违背了“开——闭原则”。
示例:股民炒股
客户端代码:
股票:
基金:
外观模式(Facade),为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。你可以为新系统开发一个外观Façade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Façade对象交互,Façade与遗留代码交互所有复杂的工作。
定义:外观模式(Facade),为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。
结构:Façade:这个外观类为子系统提供一个共同的对外接口
Clients:客户对象通过一个外观接口读写子系统中各接口的数据资源。
客户类和子系统:
适用:
(1)设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。
(2) 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。
(3) 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。
优点:(1)实现了子系统与客户端之间的松耦合关系。
(2)客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。
缺点:如果增加新的子系统可能需要修改外观类或客户端的源代码,这样就违背了“开——闭原则”。
示例:股民炒股
客户端代码:
class Program { static void Main(string[] args) { Fund jijin = new Fund(); jijin.BuyFund(); jijin.SellFund(); Console.Read(); } }
股票:
//股票 class Stock { public void Sell() { Console.WriteLine("股票卖出"); } public void Buy() { Console.WriteLine("股票买入"); } }
基金:
//基金类 class Fund { Stock gu; public Fund() { gu = new Stock(); } public void BuyFund() { gu.Buy(); } public void SellFund() { gu.Sell(); } }
外观模式(Facade),为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。你可以为新系统开发一个外观Façade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Façade对象交互,Façade与遗留代码交互所有复杂的工作。
相关文章推荐
- cf 337 div2 c
- Git(三)远程仓库操作
- ubuntu初学
- LeetCode - Binary Tree Zigzag Level Order Traversal
- Activity启动过程源码分析
- 提示音量增加事件
- Linux从程序到进程
- centos install(160112更新)
- oracle 解锁用户和修改密码
- 远程桌面问题
- 通过SecureCRT访问亚马逊Amazon EC2主机
- 最大堆的插入/删除/调整/排序操作(图解+程序)(JAVA)
- 关于Pascal和二项式系数
- 高阶函数应用
- c语言二进制文件加密
- JPA调用存储过程的方法
- 【git】删除某个文件的所有历史记录,批量删除远程分支
- C++与C的输出对齐
- Linux 技巧之 Grub 超实用技巧
- Python 虚拟环境Virtualenv