2016.12.22 学习日记-外观模式
来源:互联网 发布:猪八戒局域网考试软件 编辑:程序博客网 时间:2024/05/29 21:16
今晚终于考完了大物,应该是要和物理说再见了,时间终于多一点了,多学学线代尽量让这学期的绩点不要太难看。设计模式也要花更多的精力了,Only for dreams!
今天学习的是一个比较简单的模式,外观模式。
外观模式(Facade)
为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。引入外观角色之后,用户只需要直接与外观角色交互,用户与子系统之间的复杂关系由外观角色来实现,从而降低了系统的耦合度。
角色:
外观类:为子系统提供一个共同的对外接口,用户与子系统之间的复杂关系由此角色实现。
子系统类集合:实现子系统的功能,处理外观类对象指派的任务。
类图:
代码实现:
Facade.cs
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() { Console.WriteLine("方法组A:----"); one.MethodOne(); three.MethodThree(); } public void MethodB() { Console.WriteLine("方法组B:-----"); two.MethodTwo(); four.MethodFour(); } }
SubSystemOne.cs
class SubSystemOne { public void MethodOne() { Console.WriteLine("Method One!------"); } }
SubSystemTwo.cs
class SubSystemTwo { public void MethodTwo() { Console.WriteLine("Method Two!------"); } }
SubSystemThree.cs、
class SubSystemThree { public void MethodThree() { Console.WriteLine("Method Three!------"); } }
SubSystemFour.cs
class SubSystemFour { public void MethodFour() { Console.WriteLine("Method Four!------"); } }
Program.cs
class Program { static void Main(string[] args) { Facade facade = new Facade(); facade.MethodA(); facade.MethodB(); Console.ReadKey(); } }
在设计初期,应该有意识的将不同的两个层分离开来,层与层之间建立外观Facade,这样为复杂的子系统提供一个简单的接口,使得偶合度大大降低。
在开发阶段,子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,增加外观Facade提供一个简单的接口,可以减少他们之间的依赖。
维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。
总的来说,外观模式实现了子系统与客户端之间的松耦合关系。客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。
0 0
- 2016.12.22 学习日记-外观模式
- 学习日记之迪米特法则、外观模式和 Effective C++
- 设计模式学习--外观
- 设计模式学习----外观模式
- 设计模式学习-----外观模式
- 设计模式学习--外观模式
- 设计模式学习--外观模式
- 学习设计模式-外观模式
- 设计模式学习:外观模式
- 设计模式学习-外观模式
- 设计模式学习-Facade(外观)
- 外观模式学习和思考
- 设计模式学习--------4.外观模式学习
- 设计模式学习--------4.外观模式学习
- 2016.12.12 学习日记-简单工厂模式
- 2016.12.13学习日记-策略模式
- 2016.12.15学习日记 装饰者模式
- 2016.12.19 学习日记-工厂方法模式
- 轻松理解CRC差错检测算法七 -注解
- C语言double转long隐形bug
- A+B也疯狂
- 1.编写第1个Android应用程序实现按钮和复选框
- Redis入门
- 2016.12.22 学习日记-外观模式
- 【LeetCode】 203. Remove Linked List Elements
- 【笔记整理】我们仍未知道那天所用的虚函数的原理
- 【3-1-29】mallocfree实战
- Py第十六问 ImportError: DLL load failed: %1 is not a valid Win32 application
- TCP BBR及MPTCP的一些想法
- 欢迎使用CSDN-markdown编辑器
- Unity3d 使用Texturepacker制作NGUI图集
- chrome本地保存账号密码获取思路