外观模式

定义:

  为了系统中的一组接口提供一个一致的界面;定义了一个高层接口,使得子系统更加容易使用。

  即对底层逻辑和接口进行一次整合封装。以至于外部能更容易的使用。

结构图:

外观模式_第1张图片外观模式_第2张图片

 

 代码:

//子系统的四个类

class SubSystemOne

{

  void MethodOne();

}

class SubSystemTwo

{

  void MethodTwo();

}

class SubSystemThree

{

  void MethodThree();

}

class SubSystemfour

{

  void MethodFour();

}

//外观类,整合子系统,为外部提供更方便的统一接口

class Facade

{

  SubSystemOne One;

  SubSystemTwo Two;

  SubSystemThree Three;

  SubSystemfour Four;

  faceade()

  {

    One = new SubSystemOne();

    Two = new SubSystemTwo();

    Three = new SubSystemThree();

    Four = new SubSystemfour();

  }

  //供外部调用的整合接口A

  void MethodA()

  {

    One.MethodOne();

    Two.MethodTwo();

  }

  //供外部调用的整合接口B

  void MethodB()

  {

    One.MethodOne();

    Four.MethodFour();

  }

 

}

//客户端

Facade cFacade = new Facade();

Facade.MethodA();//客户端根本无需知道子系统细节,只依赖外观类即可,完美符合依赖倒转和迪米特法则

Facade.MethodB();

 

使用时机:

  设计初期将不同的层分离时在层与层之间建立外观;

  开发阶段,使用外观封装子系统。

  面对遗留的高复杂度或粗糙代码时,使用外观封装它。

 

优点:完美符合依赖倒转、迪米特法则。外部无需了解子系统细节,只依赖外观类;子系统也只需要对外观类实现支持,实现了子系统和外部的松耦合。

缺点:增加新的子系统可能需要修改外观类或客户端,违背了“开闭原则”。

你可能感兴趣的:(外观模式)