设计模式-门面模式

来源:《设计模式之禅》java

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

门面模式角色:安全

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

  2. subsystem 子系统角色: code

类图:对象

代码:接口

子系统对象io

/**
 * 
 */
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...");
	}
}

门面对象:class

/**
 * 
 */
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. 门面不参与子系统的业务逻辑,新建一个封装类,将这个封装类传递给门面对象。

扩展:

相关文章
相关标签/搜索