您的位置:首页 > 其它

设计模式--12.外观模式

2017-02-08 15:36 183 查看
外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。



模式实现

外观模式的主要目的在于降低系统的复杂程度,在面向对象软件系统中,类与类之间的关系越多,不能表示系统设计得越好,反而表示系统中类之间的耦合度太大,这样的系统在维护和修改时都缺乏灵活性,因为一个类的改动会导致多个类发生变化,而外观模式的引入在很大程度上降低了类与类之间的耦合关系。引入外观模式之后,增加新的子系统或者移除子系统都非常方便,客户类无须进行修改(或者极少的修改),只需要在外观类中增加或移除对子系统的引用即可。从这一点来说,外观模式在一定程度上并不符合开闭原则,增加新的子系统需要对原有系统进行一定的修改,虽然这个修改工作量不大。

外观模式中所指的子系统是一个广义的概念,它可以是一个类、一个功能模块、系统的一个组成部分或者一个完整的系统。子系统类通常是一些业务类,实现了一些具体的、独立的业务功能,其典型代码如下:

[csharp] view
plain copy

class SubSystemA

{

public void MethodA()

{

//业务实现代码

}

}

class SubSystemB

{

public void MethodB()

{

//业务实现代码

}

}

class SubSystemC

{

public void MethodC()

{

//业务实现代码

}

}

在引入外观类之后,与子系统业务类之间的交互统一由外观类来完成,在外观类中通常存在如下代码:

[csharp] view
plain copy

class Facade

{

private SubSystemA obj1 = new SubSystemA();

private SubSystemB obj2 = new SubSystemB();

private SubSystemC obj3 = new SubSystemC();

public void Method()

{

obj1.MethodA();

obj2.MethodB();

obj3.MethodC();

}

}

由于在外观类中维持了对子系统对象的引用,客户端可以通过外观类来间接调用子系统对象的业务方法,而无须与子系统对象直接交互。引入外观类后,客户端代码变得非常简单,典型代码如下:

[csharp] view
plain copy

class Program

{

static void Main(string[] args)

{

Facade facade = new Facade();

facade.Method();

}

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