外观模式(Facade pattern)
来源:互联网 发布:最快的开方算法 编辑:程序博客网 时间:2024/06/05 01:19
外观模式(Facade pattern):为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
动机
将一个系统划分成为若干个子系统有利于降低系统的复杂性。一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小。达到该目标的途径之一是就是引入一个外观(facade)对象,它为子系统中较一般的设施提供了一个单一而简单的界面。
参与者
Facade
——知道哪些子系统类负责处理请求。
——将客户的请求代理给适当的子系统对象。
Subsystem classes
——实现子系统的功能。
——处理由facade对象指派的任务。
——没有facade的任何相关信息;即没有指向facade的指针。(单向的)
效果
1)它对客户屏蔽子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便;
2)它实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的。松耦合关系使得子系统的组件变化不会影响到它的客户。 Facade模式有助于建立层次结构系统,也有助于对对象之间的依赖关系分层。Facade模式可以消除复杂的循环依赖关系。
实现
1)降低客户——子系统之间的耦合度 用抽象类实现Facade而它的具体子类对应于不同的子系统实现,这可以进一步降低客户与子系统的耦合度。另一种方法是用不同的子系统对象配置Facade对象。
2)公共子系统类与私有子系统类。
动机
将一个系统划分成为若干个子系统有利于降低系统的复杂性。一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小。达到该目标的途径之一是就是引入一个外观(facade)对象,它为子系统中较一般的设施提供了一个单一而简单的界面。
结构
参与者
Facade
——知道哪些子系统类负责处理请求。
——将客户的请求代理给适当的子系统对象。
Subsystem classes
——实现子系统的功能。
——处理由facade对象指派的任务。
——没有facade的任何相关信息;即没有指向facade的指针。(单向的)
效果
1)它对客户屏蔽子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便;
2)它实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的。松耦合关系使得子系统的组件变化不会影响到它的客户。 Facade模式有助于建立层次结构系统,也有助于对对象之间的依赖关系分层。Facade模式可以消除复杂的循环依赖关系。
实现
1)降低客户——子系统之间的耦合度 用抽象类实现Facade而它的具体子类对应于不同的子系统实现,这可以进一步降低客户与子系统的耦合度。另一种方法是用不同的子系统对象配置Facade对象。
2)公共子系统类与私有子系统类。
参考代码
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace MyFacade{ class SubSystemOne { public void MethodOne() { Console.WriteLine("Subsystem method one."); } } class SubSystemTwo { public void MethodTwo() { Console.WriteLine("Subsystem method two."); } } class SubSystemThree { public void MethodThree() { Console.WriteLine("Subsystem method three."); } } class Facade { private SubSystemOne one; private SubSystemTwo two; private SubSystemThree three; public Facade() { one = new SubSystemOne(); two = new SubSystemTwo(); three = new SubSystemThree(); } public void MethodA() { Console.WriteLine("Facade method A"); one.MethodOne(); three.MethodThree(); } public void MethodB() { Console.WriteLine("Facade method B"); two.MethodTwo(); three.MethodThree(); } }}
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace MyFacade{ class Program { static void Main(string[] args) { Facade facade = new Facade(); facade.MethodA(); facade.MethodB(); Console.ReadKey(); } }}相关模式
Mediator模式与Facade模式的相似之处是,它抽象了一些已有的类的功能。然而,Mediator的目的是对同事之间的任意通讯进行抽象,通常集中不属于任何单个对象的功能。Mediator的同事对象知道中介者并与它通信,而不是直接与其他同类对象通信。相对而言,Facade模式仅对子系统对象的接口进行抽象,从而使它们更容易使用;它并不定义新功能,子系统也不知道facade的存在。
中介者模式结构
0 0
- 外观模式(facade pattern)
- 外观模式(Facade Pattern)
- 外观模式(Facade Pattern)
- 外观模式(Facade Pattern)
- 外观模式(Facade Pattern)
- 外观模式(Facade Pattern)
- 外观模式(Facade pattern)
- 外观模式(Facade Pattern)
- 外观模式(Facade Pattern)
- 外观模式(Facade Pattern)
- 外观模式(Facade Pattern)
- 外观模式 Facade Pattern
- 外观模式(Facade Pattern)
- 外观模式(Facade Pattern)
- facade pattern--外观模式
- 外观模式(Facade Pattern)
- Facade Pattern 外观模式
- 外观模式 | Facade Pattern
- Android-UI布局---RecyclerView学习(五)长按item删除事件
- 南大软院21天大神养成计划第1天
- 折线图(一)绘制折线图坐标轴
- linux内核架构
- 怎样判断ucos ii ostaskcreate任务的 堆栈是否溢出
- 外观模式(Facade pattern)
- 做个测试自己看看
- ((Activity) getContext()).finish()怎么理解
- 最近
- Linux netstat命令详解
- Android Context详解
- iOS经典讲解之实现扫描二维码ZBarSDK的使用
- 学习札记
- Android 开源库StickyListHeadersListView来实现ListView列表分组效果