外观模式
2015-12-27 15:54
162 查看
师傅说在个人机房重构的时候至少要用到抽象工厂模式和外观模式,那么外观模式一定很基础啦,因此把外观模式总结一下,加深印象,为以后铺好路吧(其实是这周博客不知道写啥了
)
那么什么是外观模式呢?
外观模式为子系统的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式结构图如下:
下面以股民炒股为例来解释外观模式,新股民在没有足够了解证券知识的情况下很容易亏钱,而通过基金由专业经理人管理则是一条很好的选择,在编程中,就是众多股民只和基金打交道,而实际操作交由基金经理人来完成,从而避免了股民和股票耦合性过高的弊端。
使用:
1、在设计初期阶段,应该要有意识的将不同的两个层分离,在层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低。(不久就要用到了)
2、在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,增加外观Facade可以提供一个简单的接口,减少它们之间的依赖。
3、在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,这时可以为新系统开发一个外观Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。
)
那么什么是外观模式呢?
外观模式为子系统的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式结构图如下:
下面以股民炒股为例来解释外观模式,新股民在没有足够了解证券知识的情况下很容易亏钱,而通过基金由专业经理人管理则是一条很好的选择,在编程中,就是众多股民只和基金打交道,而实际操作交由基金经理人来完成,从而避免了股民和股票耦合性过高的弊端。
namespace 外观模式 { class Program { static void Main(string[] args) { //股民对股票的购买售出由基金完成 Fund jijin = new Fund(); //基金购买 jijin.BuyFund(); //基金赎回 jijin.SellFund(); Console.Read(); } } //股票类 class Stock1 { //卖股票 public void Sell() { Console.WriteLine("股票1卖出"); } //买股票 public void Buy() { Console.WriteLine("股票1买入"); } } class Stock2 { //卖股票 public void Sell() { Console.WriteLine("股票1卖出"); } //买股票 public void Buy() { Console.WriteLine("股票1买入"); } } class Stock3 { //卖股票 public void Sell() { Console.WriteLine("股票1卖出"); } //买股票 public void Buy() { Console.WriteLine("股票1买入"); } } //基金类,了解所有的股票的方法和属性,以备外界调用 class Fund { Stock1 gu1; Stock2 gu2; Stock3 gu3; public Fund() { gu1 = new Stock1(); gu2 = new Stock2(); gu3 = new Stock3(); } public void BuyFund() { gu1.Buy(); gu2.Buy(); gu3.Buy(); } public void SellFund() { gu1.Sell(); gu2.Sell(); gu3.Sell(); } } }这里的基金类就相当于外观类,充当了一个代理的角色。
使用:
1、在设计初期阶段,应该要有意识的将不同的两个层分离,在层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低。(不久就要用到了)
2、在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,增加外观Facade可以提供一个简单的接口,减少它们之间的依赖。
3、在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,这时可以为新系统开发一个外观Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。
相关文章推荐
- Struts2之文件下载
- 26. 查询某个字段重复的记录
- JAVA基础之原始类型变量
- strlen和sizeof的区别
- [spark]倒排索引
- 从servlet视点观察web程序流程
- iOS面试题7
- Struts2之文件上传(单文件/多文件)
- 天津Uber优步司机奖励政策(12月14日到12月20日)
- LeetCode - Permutation Sequence
- tabbarController
- 实现Form认证、让Action 方法更安全
- MySQL 索引的分类
- [leetcode] 171. Excel Sheet Column Number 解题报告
- 2015-12-27 socket的用法
- D2UB
- android中gridview的上拉加载更多
- Hibernate的学习
- 苏州Uber优步司机奖励政策(12月14日到12月20日)
- 【原】SDWebImage源码阅读(五)