外观模式(Facade)

[置顶]设计模式 –外观模式(Facade)

分类:【设计模式】

外观模式设计模式

什么是外观模式?

简单点说:外观模式是一种使用频率非常高的结构型设计模式,它通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。

概述:

在真实的应用系统中,一个子系统可能由很多类组成。子系统的客户为了它们的需要,需要和子系统中的一些类进行交互。客户和子系统的类进行直接的交互会导致客户端对象和子系统之间高度耦合。任何的类似于对子系统中类的接口的修改,会对依赖于它的所有的客户类造成影响。

外观是一个能为子系统和客户提供简单接口的类。当正确的应用外观,客户不再直接和子系统中的类交互,而是与外观交互。外观承担与子系统中类交互的责任。实际上,外观是子系统与客户的接口,,这样外观模式降低了子系统和客户的耦合度。

子系统类通常是一些业务类,实现了一些具体的、独立的业务功能,其典型代码如下:

class One{public void MethodA(){System.out.println( "methodA–> is runing" );}}class Two{public void MethodB(){System.out.println( "methodB–> is runing" );}}class Three{public void MethodC(){System.out.println( "methodC–> is runing" );}}class Four{public void MethodD(){System.out.println( "methodD–> is runing" );}}

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

class Facade{private One obj1 = new One();private Two obj2 = new Two();private Three obj3 = new Three();private Four obj4 = new Four();public void Method1(){System.out.println("方法组1");obj1.MethodA();obj2.MethodB();obj3.MethodC();}public void Method2(){System.out.println("方法组2");obj1.MethodA();obj2.MethodB();obj4.MethodD();}}

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

class Program{static void Main(string[] args){Facade facade = new Facade();facade.Method1();facade.Method2();}}

何时使用外观模式?

第一:设计初期阶段,有意识的将不同的两个层分离,层与层之间建立外观Facade,这样就可以为复杂的子系统提供一个简单的接口,耦合性降低。

第三:维护一个大型系统时,可能这个系统已经非常难以维护和扩展,此时可以为系统新开发一个Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。

版权声明:本文为博主原创文章,未经博主允许不得转载。

上一篇MyBatis –快速入门下一篇MyBatis — 一步步教你使用MyBatis

顶1踩0

因害怕失败而不敢放手一搏,永远不会成功

外观模式(Facade)

相关文章:

你感兴趣的文章:

标签云: