设计模式(十七)---门面模式

本文介绍了门面模式的概念及其应用场景,通过实例演示了如何利用门面模式简化子系统接口调用的过程,并总结了门面模式的优点和缺点。
 定义:(Facada Pattern)要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行,

  门面模式提供一个高层次的接口,使得子系统更易于使用。

一般模式:

 
  Facade门面角色
  ---|客户端可以调用这个角色的方法,此角色知道子系统的所有功能和责任。
  subSystem子系统角色
  ---|可以同时一个或多个子系统。每个子系统都不是一个单独的类,而是一个类的集合

  子系统并不知道门面的存在,对于子系统而言,门面仅仅是另一个客户端而已。

模型图:

public class FacadeTest {
	public static void main(String[] args) {
		//获取门面对象
		Facade f = new Facade();
		//调用子系统A的方法
		f.methodA();
	}
}
/**
 * 子系统A,在具体的项目中
 * 子系统并不是一个类,而是一个类的集合,这里只是简单地
 * 以类来代替子系统。
 * @author admin
 *
 */
class ClassA{
	public void doSomethingA(){
		System.out.println("子系统A的具体功能...");
	}
}
/**
 * 子系统A,在具体的项目中
 * 子系统并不是一个类,而是一个类的集合,这里只是简单地
 * 以类来代替子系统。
 * @author admin
 *
 */
class ClassB{
	public void doSomethingB(){
		System.out.println("子系统B的具体功能...");
	}
}
/**
 * 门面,是外界访问子系统中的具体功能的入口。
 * @author admin
 *
 */
class Facade{
	private ClassA classA = new ClassA();
	private ClassB classB = new ClassB();
	
	//提供给外部访问子系统的方法
	public void methodA(){
		this.classA.doSomethingA();
	}
	//提供给外部访问子系统的方法
	public void methodB(){
		this.classB.doSomethingB();
	} 
}

  一个例子:

  邮寄一封信要经过一下四个步骤:写信的内容、信的封面、封好、投递到邮箱。
  这写必要的步骤相当于一个系统,客户端可以通过门面类来调用这个系统的方法。

public class FacadeT {
	public static void main(String[] args) {
		//获取门面类
		ModenPostOffice mpo = new ModenPostOffice();
		mpo.sendMessage("您好!\nOracle,I want to change the world including my lover!", "2020年的我!");
	}
}
interface ILetterProcess{
	//写信的内容
	void wirteLetter(String context);
	//信的封面
	void fillEnvelope(String address);
	//装封好信件
	void letterInotoEnvolope();
	//投递到邮箱
	void sendLetter();
}
/**
 * 信件方法的具体实现类,子系统内部的某个类。
 * @author admin
 *
 */
class LetterProcessImpl implements ILetterProcess{

	@Override
	public void wirteLetter(String context) {
		System.out.println("信件的内容是:"+context);
	}

	@Override
	public void fillEnvelope(String address) {
		System.out.println("信件的地址是:"+address);
	}

	@Override
	public void letterInotoEnvolope() {
		System.out.println("装封好了信件...");
	}

	@Override
	public void sendLetter() {
		System.out.println("发送信件...");
	}
}
/**
 * 门面类,为外部系统访问内部系统提供接口。
 * @author admin
 *
 */
class ModenPostOffice{
	private ILetterProcess letter = new LetterProcessImpl();
	//
	public void sendMessage(String context,String address){
		//先写好信
		this.letter.wirteLetter(context);
		//在写好地址
		this.letter.fillEnvelope(address);
		//找到邮局,投递信件
		this.letter.letterInotoEnvolope();
		//发送信件
		this.letter.sendLetter();
	}
}

 门面模式的优点:
  ---|减少系统的相互依赖
  ---|提高灵活性
  ---|提高安全性
  门面模式的缺点:
  ---|不符合开闭原则
  门面模式的使用场景
  ---|为一个复杂的模块或子系统提供一个共外界访问的接口
  ---|子系统相对独立---外界对子系统的访问只要黑箱操作即可
  ---|预防低水平人员带来的风险扩散
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值