外观模式(Facade pattern)
2015-11-16 22:03
393 查看
外观模式(Facade pattern):为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
动机
将一个系统划分成为若干个子系统有利于降低系统的复杂性。一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小。达到该目标的途径之一是就是引入一个外观(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();
}
}
}
Mediator模式与Facade模式的相似之处是,它抽象了一些已有的类的功能。然而,Mediator的目的是对同事之间的任意通讯进行抽象,通常集中不属于任何单个对象的功能。Mediator的同事对象知道中介者并与它通信,而不是直接与其他同类对象通信。相对而言,Facade模式仅对子系统对象的接口进行抽象,从而使它们更容易使用;它并不定义新功能,子系统也不知道facade的存在。
中介者模式结构
动机
将一个系统划分成为若干个子系统有利于降低系统的复杂性。一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小。达到该目标的途径之一是就是引入一个外观(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的存在。
中介者模式结构
相关文章推荐
- 利用Aspose.Word控件实现Word文档的操作
- 实验一报告 20135209潘恒 20135204郝智宇
- 学习Android之初。
- python下编译py成pyc和pyo
- 数组
- 没有躲过的坑--string中的c_str()陷阱
- frame bounds center
- Markdown快速入门
- Markdown快速入门
- 没有躲过的坑--string中的c_str()陷阱
- source insight 注册码
- 另类加载dll---快捷方式启动参数
- SQL 标准中的四种隔离级别
- LeetCode Longest Increasing Subsequence (LIS O(nlogn))
- JS正则表达式
- 026.LinkedList底层详解
- easy-size控件自适应大小的使用
- 最近
- Ionic-wechat项目边开发边学(一):环境搭建和创建一个项目
- SDWebImage加进度条展示图片下载进度