码迷,mamicode.com
首页 > 其他好文 > 详细

外观模式

时间:2016-08-24 14:45:58      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

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

2.外观模式的结构和说明:
Facade: 定义子系统的多个模块对外的高层接口,通过需要调用内部多个模块,从而把客户的请求代理给适当的子系统对象。
模块:接受Facade对象的委派,真正实现功能,各个模块之间可能有交互。但是请注意,Facade对象知道各个模块,但是各个模块不应该知道Facade对象。

3.模式实现

AModuleApi.java

package com.java.pattern.facade;

/**
 * A模块的接口
 * 
 */
public interface AModuleApi {
	// A模块对外的一个功能方法
	public void testA();
}

AModuleImpl.java

package com.java.pattern.facade;

public class AModuleImpl implements AModuleApi {

	public void testA() {
		System.out.println("现在在A模块里面操作testA方法");
	}
}

BModuleApi.java

package com.java.pattern.facade;

/**
 * B模块的接口
 * 
 */
public interface BModuleApi {
	// B模块对外的一个功能方法
	public void testB();
}

BModuleImpl.java

package com.java.pattern.facade;

public class BModuleImpl implements BModuleApi {

	public void testB() {
		System.out.println("现在在B模块里面操作testB方法");
	}
}

Facade.java

package com.java.pattern.facade;

/**
 * 定义外观对象
 * 
 */
public class Facade {

	// 满足客户需要的功能
	public void test() {
		AModuleApi a = new AModuleImpl();
		a.testA();

		BModuleApi b = new BModuleImpl();
		b.testB();
	}
}

Client.java

package com.java.pattern.facade;

/**
 * 客户端
 */
public class Client {
	public static void main(String[] args) {
		// 使用Facade
		new Facade().test();
	}
}


运行结果:
现在在A模块里面操作testA方法
现在在B模块里面操作testB方法

4.思考外观模式
4.1 外观模式的本质是:封装交互,简化调用。
4.2 何时选用外观模式,建议在以下情况中选用:
A,如果你希望为一个复杂的子系统提供一个简单接口的时候,可以考虑使用外观模式。使用外观对象来实现大部分客户需要的功能,从而简化客户的使用。
B,如果想要让客户程序和抽象类的实现部分松散耦合,可以考虑使用外观模式,使用外观对象来将这个子系统与它的客户分离开来,从而提供子系统的独立性和可移植行。
C,如果构建多层结构的系统,可以考虑使用外观模式,使用外观对象作为每层的入口,这样可以简化层间调用,也可以松散层次之间的依赖关系。

外观模式

标签:

原文地址:http://blog.csdn.net/yelangjueqi/article/details/52297065

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!