`
zzq19860626
  • 浏览: 264157 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
B20df9e2-fb3d-3644-9f72-c1619842f682
设计模式学习笔记
浏览量:179875
87eaf24f-812a-3463-8e65-e3197d2ad8c2
java虚拟机
浏览量:26575
社区版块
存档分类
最新评论

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——迭代器模式

 
  • 大小: 20.6 KB
  • 大小: 11.4 KB
7
7
分享到:
评论
10 楼 zzq19860626 2013-08-29  
javavsxiaoming 写道
门面的那个类,不应把所有的方法都组在一起吧,容易误解。比方加个 分配宿舍,男生去男宿舍,女生去女宿舍这是2个不同的方法,这时你组在一起不就有问题了吗。

恩,这个依具体情况而定,在门面模式里面是有这两种做法的,这里用一个方法来完成了。
9 楼 javavsxiaoming 2013-08-15  
门面的那个类,不应把所有的方法都组在一起吧,容易误解。比方加个 分配宿舍,男生去男宿舍,女生去女宿舍这是2个不同的方法,这时你组在一起不就有问题了吗。
8 楼 宁帅陈 2013-08-05  
大致了解了 谢谢
7 楼 zzq19860626 2013-07-31  
wingsrao 写道
楼主原创么?整的不错,通俗易懂。

算是原创吧,借着前人的思想,自己想的例子。
6 楼 wingsrao 2013-07-31  
楼主原创么?整的不错,通俗易懂。
5 楼 ydvvizqoe 2013-07-31  
学习了。
还在为Class Not Found烦恼么? 试试 http://www.boyunjian.com/do/jarse/index.html?fm=90212
4 楼 hailongshih 2013-07-31  
Good,
3 楼 zzq19860626 2013-07-31  
kentkwan 写道
感觉博主写的东西更像是组合模式

的确门面模式和组合模式的例子有点相似,但是组合模式侧重的是怎么把创建复杂的对象变的简单,把各个子部件的创建隐藏起来;而门面模式在于提供统一的用户界面,简化客户单对子系统的调用,更方便客户端的使用,是迪米特法则的体现。
2 楼 kentkwan 2013-07-31  
感觉博主写的东西更像是组合模式
1 楼 kentkwan 2013-07-31  
facade是接口的组合,对使用者提供了统一的入口点,门前和门后只需要关心facade层的定义

相关推荐

    java设计模式学习笔记

    ### Java设计模式学习笔记——外观模式(Facade Pattern) #### 概述 设计模式是软件工程领域中一种解决常见问题的可复用解决方案。在Java开发过程中,掌握设计模式能够帮助开发者更好地组织代码结构,提高代码的...

    java设计模式

    目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式

    经典的EJB模式——门面模式

    门面模式,作为一种软件设计模式,是EJB(Enterprise Java Beans)中的一种经典模式,它在企业级应用开发中起到简化复杂系统接口的作用。EJB是Java编程语言中用于构建服务器端企业级应用的组件,它们是可分布式部署...

    Java设计模式经典搞笑珍藏版

    通过《Java设计模式经典搞笑珍藏版》,读者不仅可以学习到设计模式的基本原理和实现方式,还能通过生动的例子加深理解。设计模式是软件开发中非常重要的一部分,掌握了这些模式可以帮助开发者写出更高效、更易维护的...

    java 设计模式-个人总结

    ### Java设计模式——个人总结 #### 一、概述 本文档总结了常见的Java设计模式及其应用,涵盖了十种经典的设计模式,并提供了相应的代码示例。这些设计模式旨在解决软件开发过程中遇到的一系列常见问题,帮助...

    java和设计模式ppt教程

    java和设计模式ppt包含工厂模式、建造模式、原始模型模式、单例模式、结构模式、适配器、桥梁模式、合成模式、装饰模式、门面模式、享元模式、代理模式、行为模式、解释器模式、迭代子模式、调停者模式、备忘录模式...

    软件设计模式大作业

    在本“软件设计模式大作业”中,学生深入学习并实践了Java编程语言中的六种经典设计模式,这些模式对于理解和构建复杂、可维护的软件系统至关重要。以下是关于这些设计模式的详细介绍: 1. **简单工厂模式**:这是...

    设计模式资料有助于你更好的了解

    在本文中,我们将深入探讨两个常见的设计模式——工厂模式和门面模式,并结合GoF(Gang of Four)的设计模式理论,阐述它们在软件设计中的作用和重要性。 首先,工厂模式是一种创建型设计模式,它提供了一种创建...

    设计模式之外观模式

    本篇文章将通过一个具体的案例——使用外观模式实现教室设备的控制器来深入解析这一设计模式。 #### 二、外观模式简介 ##### 2.1 定义 外观模式(Facade Pattern),也称为门面模式,是一种结构型设计模式,用于...

    Building Java Enterprise Applications vol 1 Architecture

    - **设计模式**:介绍了与实体Bean相关的常见设计模式。 - **Bean编码**:指导读者如何编写符合规范的实体Bean代码。 - **Bean部署**:解释了实体Bean的部署流程,包括配置和测试。 **第5章:高级实体** - **ID...

    基于JAVA的聊天工具开发

    在附录部分,Solomon1558可能会进一步讨论设计模式的应用,比如单例模式用于管理服务器实例,工厂模式用于对象的创建,或者观察者模式用于实现消息推送等功能。这些设计模式的运用使得代码更加模块化,易于扩展和...

    KFC点餐系统

    《KFC点餐系统——基于Java GUI与抽象工厂模式》 KFC点餐系统是一款以Java编程语言开发的图形用户界面(GUI)应用程序,旨在...对于学习Java编程和设计模式的人来说,这是一个很好的实践案例,值得深入研究和学习。

    门面1

    在IT行业中,"门面1"的标题可能指的是一个基于Java编程语言实现的软件设计模式——门面(Facade)模式。门面模式是一种结构型设计模式,它为复杂的子系统提供了一个简单的接口,使得客户端无需了解子系统内部的复杂...

    SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

    **控制反转(IoC)**: IoC 是一种设计模式,用来降低代码之间的耦合度。在 Spring 中,IoC 容器负责管理对象的生命周期和配置,从而实现了依赖注入。 **面向切面编程(AOP)**: AOP 是一种编程范式,通过将横切关注...

    IT技术简历模板1---希望大家喜欢

    7. **设计模式和技术框架**:包括抽象工厂模式、装饰者模式、代理模式、门面模式、Struts、Hibernate、Spring、AOP、DOM4j、Log4j等,显示了求职者扎实的技术基础和灵活的应用能力。 8. **系统架构**:介绍了Web层...

    基于jsp的网上文玩销售系统源码数据库论文.doc

    《基于JSP的网上文玩销售系统源码数据库论文》主要探讨了在电子商务蓬勃发展的背景下,如何利用现代技术手段——JSP(Java Server Pages)来构建一个专门针对文玩在线销售的平台。本文将深入分析该系统的开发背景、...

Global site tag (gtag.js) - Google Analytics