外观模式(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)公共子系统类与私有子系统类。

参考代码

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
原创粉丝点击