JAVA设计模式学习15——门面模式

门面(Facade)模式(也叫外观模式),为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。如下图表示:

 从上图可以看出门面模式是把复杂的业务封装到了子系统内部,而对外部来说只有一个统一的访问界面,使得子系统更加简单,容易被客户端使用。门面模式的体现的是面向对象设计里面的迪米特法则(Law of Demeter)简称LoD,讲的是一个软件实体应当与尽可能少的其他软件实体发生相互作用,通过上面的示意图很明天体现的就是这一点。

 

门面模式的角色:

门面(Facade)角色:客户端通过此角色能了解到子系统提供的功能,门面角色会委派任务到相应的子系统中去。

子系统(SubSystem)角色:子系统不是单独的类,而是类的集合。负责提供业务逻辑,对子系统来说门面就是它的一个客户端。

 

在GOF中门面模式没有一个一般化的类图表示,这里用实例说明。门面模式在生活中常见,小时候玩过的游戏机,零花钱都买币玩那个三国志了,一个操作面板相当于一个门面,上面操作杆和操作按钮相当于门面提供的方法,这些方法实现是委托游戏机里面的各个部件,各个部件相互调用,相互配合完成了游戏的控制和操作,把复杂的业务逻辑封装起来,只提供简单有效的操作,这样十几岁的小孩子,乃至8,9岁的孩子都玩的很憨,如果不封装起来,给他电路,显示器,控制元件,估计没人会玩。

 

还记得我们大学的第一天吗,一个陌生的城市,陌生的环境,入学报到可以说相对复杂和麻烦的事情,但是往往都会有学生会的学长、学姐的接待和帮助,基本上跟着他走,所有事情都由他给你办了,只要签字或交钱就ok了,一切便的很简单。


 代码如下:
package facade;
/**
 * 
 *作者:alaric
 *时间:2013-7-30下午7:53:07
 *描述:招生办
 */
public class EnrollmentOffice{
 
	/**
	 * 注册
	 */
	public void register(){
		System.out.println("注册");
	}
}
 
package facade;
/**
 * 
 *作者:alaric
 *时间:2013-7-30下午7:54:24
 *描述:财务办
 */
public class FinanceSection {

	/**
	 * 缴费
	 */
	public void payment(){
		System.out.println("交学费");
	}
}
 
package facade;

/**
 * 
 *作者:alaric
 *时间:2013-7-30下午7:54:44
 *描述:学生办
 */
public class StudentAffairsOffice {

	public void getSomeGoods(){
		System.out.println("领取生活用品");
	}
}
 
package facade;
/**
 * 
 *作者:alaric
 *时间:2013-7-30下午7:53:46
 *描述:门面类,就是我们的学长,学姐
 */
public class Facade {
	
	EnrollmentOffice enroll = new EnrollmentOffice();
	FinanceSection finance = new FinanceSection();
	StudentAffairsOffice studentAffairs = new StudentAffairsOffice();
	public void helpJion(){
		enroll.register();
		finance.payment();
		studentAffairs.getSomeGoods();
	}

}
 
package facade;
/**
 * 
 *作者:alaric
 *时间:2013-7-30下午7:52:39
 *描述:客户端
 */
public class Client {

	public static void main(String[] args) {
		Facade facade = new Facade();
		facade.helpJion();
	}
}

 运行结果:

注册

交学费

领取生活用品

 

门面模式的好处在于对于客户端子系统屏蔽了内部组件,减少客户单处理对象的数目,使客户端调用变的简单;将客户端和子系统解耦,子系统内部紧耦合,达到了系统设计的高内聚低耦合的要求。

 

 

设计模式系列目录:

JAVA设计模式学习1——统一建模语言UML

JAVA设计模式学习2——面向对象设计原则

JAVA设计模式学习3——设计模式概述

JAVA设计模式学习4——简单工厂模式

JAVA设计模式学习5——工厂方法模式

JAVA设计模式学习6——抽象工厂模式

JAVA设计模式学习7——单例模式

JAVA设计模式学习8——建造模式

JAVA设计模式学习9——原型模式

JAVA设计模式学习10——组合模式

JAVA设计模式学习11——适配器模式

JAVA设计模式学习12——装饰器模式

JAVA设计模式学习13——代理模式

JAVA设计模式学习14——享元模式

JAVA设计模式学习15——门面模式

JAVA设计模式学习16——桥梁模式

JAVA设计模式学习17——策略模式

JAVA设计模式学习18——模版方法模式

JAVA设计模式学习19——观察者模式

JAVA设计模式学习20——责任链模式

JAVA设计模式学习21——命令模式

JAVA设计模式学习22——备忘录模式

JAVA设计模式学习23——状态模式

JAVA设计模式学习24——访问者模式

JAVA设计模式学习25——迭代器模式

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值