薛磊 Job Seeker

23种设计模式——10.Facade 外观(结构型模式)


意图(Intent)

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

结构

  • Facade门面角色

  • subsystem子系统角色

使用场景

  • 为一个复杂的模块或子系统提供一个供外界访问的接口

  • 子系统相对独立——外界对子系统的访问只要黑箱操作即可

  • 预防低水平人员带来的风险扩散

Facade模式的几个要点

  • 从客户程序的角度看,Facade模式不仅简化了整个组件系统的接口,同时对于组件内部与外部客户程序来说,从某种程度上也达到了一种“解耦”的效果——内部子系统的任何变化不会影响到Facade接口的变化。

  • Facade设计模式更注重从架构的从层次去看整个系统,而不是单个类的层次。Facade很多时候更是一种架构设计模式。

  • 门面不参与子系统内部的业务逻辑,子系统不能依赖门面才能被访问。

  • 注意区分Facade模式、Adapter模式、Bridge模式与Decorator模式。

  Facade模式更注重简化接口,Adapter模式注重转换接口,Bridge模式注重分离接口(抽象)与其实现,Decorator模式更注重稳定接口的前提下为对象扩展功能。

示例代码

子系统:

public class ClassA{
	public void doSomethingA();
}

public class ClassB{
	public void doSomethingB();
}

public class ClassC{
	public void doSomethingC();
}

门面对象:

public class Facade{
	//被委托的对象
	private ClassA a = new ClassA();
	private ClassB b = new ClassB();
	private ClassC c = new ClassC();

	//提供给外部访问的方法
	public void methodA(){
		a.doSomethingA();
	}
	
	public void methodB(){
		b.doSomethingB();
	}

	public void methodC(){
		c.doSomethingC();
	}
}

Comments

Content