您的位置:首页 > 其它

外观模式(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();
}
}
}
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的存在。

中介者模式结构




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: