设计模式-门面模式

来源:《设计模式之禅》

定义:门面模式也叫外观模式,要求一个子系统的外部与其内部通信必须通过一个统一的对象进行。也就是提供一个访问子系统的接口,除了这个接口不允许任何有任何访问子系统的行为发生。

门面模式角色:

  1. facade 门面角色:客户端调用这个角色访问子系统。

  2. subsystem 子系统角色: 

类图:

设计模式-门面模式

代码:

子系统对象

/**
 * 
 */
package cc.rico.pattern.facade;

/**
 * @author rico
 * 子系统对象
 */
public class ClazzA {
	public void option() {
		System.out.println("###ClazzA.option...");
	}
}
/**
 * 
 */
package cc.rico.pattern.facade;

/**
 * @author rico
 * 子系统对象
 */
public class ClazzB {
	public void option() {
		System.out.println("###ClazzB.option...");
	}
}
/**
 * 
 */
package cc.rico.pattern.facade;

/**
 * @author rico
 * 子系统对象
 */
public class ClazzC {
	
	public void option() {
		System.out.println("###ClazzC.option...");
	}
}

门面对象:

/**
 * 
 */
package cc.rico.pattern.facade;

/**
 * @author rico
 * 门面对象
 */
public class Facade {
	ClazzA clazzA = new ClazzA();
	ClazzB clazzB = new ClazzB();
	ClazzC clazzC = new ClazzC();
	
	public void optionA() {
		clazzA.option();
	}
	
	public void optionB() {
		clazzB.option();
	}
	
	public void optionC() {
		clazzC.option();
	}
}

场景类:

/**
 * 
 */
package cc.rico.pattern.facade;

/**
 * @author rico
 * 场景类
 */
public class Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Facade facade = new Facade();
		
		facade.optionA();
		//facade.optionB();
		//facade.optionC();
	}

}


门面模式优点:

  1. 减少系统的互相依赖。依赖转换为对门面对象的依赖,与子系统无关。

  2. 提高灵活性。减少依赖,提高灵活。

  3. 提高安全性。只能访问门面对象暴露的访问接口。

门面模式缺点:

     不符合开闭原则,对修改关闭,对扩展开放,门面对象出现问题,只能对门面对象进行修改。

使用场景:

  1. 为一个复杂的模块或子系统提供一个供外部访问的接口。

  2. 子系统相对独立,外界对子系统的访问只需要黑箱操作即可。

  3. 预防低水平开放人员误操作。

注意事项:

  1. 一个子系统可以有多个门面,

    • 门面太庞大,根据功能划分门面

    • 子系统提供不同的访问路径。

  2. 门面不参与子系统的业务逻辑,新建一个封装类,将这个封装类传递给门面对象。

扩展:


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