设计模式之-门面模式

门面模式:

模式动机:

引入门面角色之后,用户只需要直接与门面角色交互,用户与子系统之间的复杂关系由门面角色来实现,从而降低了系统的耦合度 


  模式定义

门面模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的门面对象进行,为子系统中的一组接口提供一个一致的界面,门面模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。门面模式又称为门面模式,它是一种对象结构型模。

模式结构 

门面模式包含如下角色:

Facade: 门面角色
SubSystem:子系统角色 

代码示例如下:

public class SubSystemA
{
   public void doSomething(){

      System.out.println("I'm A sub-system");   

    }

}

public class SubSystemB 
{
   public void doSomething(){

      System.out.println("I'm B sub-system");   

       }

}

public class SubSystemC 
{
   public void doSomething(){

      System.out.println("I'm C sub-system");   

    }

}

public class SubSystemD 
{
   public void doSomething(){

      System.out.println("I'm D sub-system");   

    }

}

public class Facade{

  private SubSystemA

  private SubSystemB;

  private SubSystemC;

  private SubSystemD;

  public Facade(){

  subSystemA=new SubSystemA();

  subSystemB=new SubSystemB();

  subSystemC=new SubSystemC();

  subSystemD=new SubSystemD();

  }

  public void doABCD(){

  	this.subSystemA.doSomething();

      this.subSystemB.doSomething();

      this.subSystemC.doSomething();

      this.subSystemD.doSomething();

  }

  ......

}</span>


总结:

门面模式要求一个子系统的外部与其内部的通信通过一个统一的门面对象进行,门面类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与门面对象打交道,而不需要与子系统内部的很多对象打交道。

门面模式主要优点在于对客户屏蔽子系统组件,减少了客户处理的对象数目并使得子系统使用起来更加容易,它实现了子系统与客户之间的松耦合关系,并降低了大型软件系统中的编译依赖性,简化了系统在不同平台之间的移植过程;其缺点在于不能很好地限制客户使用子系统类,而且在不引入抽象门面类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了开闭原则” 门面模式适用情况包括:要为一个复杂子系统提一个简单接口;客户程序与多个子系统之间存在大的依赖性;在层次化结构中,需要定义系统中一层的入口,使得层与层之间不直接产生联系 


 

你可能感兴趣的:(设计模式之-门面模式)