外观模式

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,如果构建多层结构的系统,可以考虑使用外观模式,使用外观对象作为每层的入口,这样可以简化层间调用,也可以松散层次之间的依赖关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值