`
cobrano1
  • 浏览: 28572 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

对追MM设计模式系列中Facade模式的解释

阅读更多

看过 风雪涟漪兄写过一篇外观模式(Facade Pattern) 追MM的帖子, 一直很喜欢网上流行那篇 用追MM比喻设计模式的帖子, 只是一直没见过对应的代码实现, 看了风雪涟漪兄写的帖子很有创意,  但是觉得其中代码还是不够贴切, 在这里有写了一遍,欢迎大家都来投鸡蛋。

 

外观模式:

定义:它为子系统中的一组接口提供一个统一的高层接口。是的子系统更容易使用。

 

有一天女朋友想要去一个地方旅游。。旅游需要考虑很多很多的问题。如旅游的地点,航班,宾馆,饭店。这些事情做起来其实蛮复杂的,如果女朋友是一个怕麻烦的人, 那这些事情就应该我来做了。接下来我该怎么办呢?  下面我们先定义几个接口,再接着说。

 

interface Retaurant {
	FoodPojo supplyFood();
}
interface Hotel{
	RoomPojo supplyRoom();
}
interface AirlineCompany{
	Flight book();
}
class FoodPojo {}
class RoomPojo {}
class Flight{}

 以上接口的对象是mm旅游所必须要预定的三个商业单位,它是具体是什么mm不想知道(漂亮女孩都这样),这三个对象能给mm提供她需要的航班,酒店房间,美食。  可是三个接口对mm来说还是复杂, 只要给她一个旅游计划就好了。

class TravelPlan{
	Retaurant retaurant;
	Hotel hotal;
	AirlineCompany airlineCompany;
	public Retaurant getRetaurant() {
		return retaurant;
	}
	public Hotel getHotal() {
		return hotal;
	}
	public AirlineCompany getAirlineCompany() {
		return airlineCompany;
	}
	
}

 

看来mm只需要得到一个旅游计划就能搞定一切了, 不过这个旅游计划从哪里来呢, 当然要去旅游公司找了

interface TravelCorporation{
	TravelPlan buildPlan();
}

 

这时mm发话了,旅游公司我来挑, 我要中青旅!  领导发话照办~  于是我有了新的方法...............

 

class BoyFriend{
	public TravelPlan I_want_to_travel(String TravelCorporationName){
		//mm是领导,领导说找那家旅游公司就找那家旅游公司。
		TravelCorporation tc=find();
		//但是mm只要结果,给她一份旅游计划,相当与和旅游公司的合同。
		return tc.buildPlan();
	}
	private TravelCorporation find(){return //工程模式得到;}
}

 

到这里,mm开始去旅游啦。

class GirlFriend{
	BoyFriend bf;
	void travel(){
		TravelPlan tp=bf.I_want_to_travel("中青旅");
		//mm需要飞去玩的地方
		AirlineCompany air=tp.getAirlineCompany();
		Flight f=air.book();
		//到达目的地了,mm找到旅馆
		Hotel hotel=tp.getHotal();
		//到了旅馆拿房间钥匙吧
		RoomPojo room=hotel.supplyRoom();
		//mm玩累了,要吃饭了,饭店伺候
		Retaurant retaurant=tp.getRetaurant();
		//mm点菜,要吃的了
		FoodPojo food=retaurant.supplyFood();
	}
}

 

有吃有玩有住,mm很满意, 不用操心,只是对男朋友说了句话得到一个旅游合同就搞定一下了,mm好喜欢会Facade模式的gg。

 

于是mm也改了自己的类,表达了对gg的感情。

class GirlFriend(){
     private BoyFriend bf
     GirlFriend(){
          bf=new MyLover();
     }

}

 

 o(∩_∩)o...

2
0
分享到:
评论
1 楼 风雪涟漪 2009-04-30  
其实 我说的例子比较极端 。想极端下形容 facade类如何把子系统的API简单化。让最终的用户更简单的使用。而忽略了些细节问题。呵呵。

相关推荐

    追MM与23种设计模式

    ### 追MM与23种设计模式 #### 设计模式简介及应用实例解析 本文将通过生动幽默的方式介绍23种经典的设计模式,并将其应用于“追MM”的情境中,帮助读者在轻松愉快的氛围中理解并掌握这些重要的编程概念。 #### 1....

    从追MM谈JAVA的23种设计模式

    "从追MM谈JAVA的23种设计模式"这篇文章以一种幽默轻松的方式,将Java编程中的23种设计模式与追求心仪对象的过程进行类比,使抽象的概念更加生动易懂。以下是对这23种设计模式的详细解读: 1. **单例模式(Singleton...

    追MM与Java的23种设计模式.txt

    标题:“追MM与Java的23种设计模式” 描述:“细说Java的23种设计模式,望大家喜欢” 从给定的文件标题、描述、标签以及部分内容中,我们可以提炼出关于Java设计模式的重要知识点。Java设计模式是软件工程领域的一...

    从追MM谈Java的23种设计模式

    ### 从追MM谈Java的23种设计模式 ...以上是从“追MM”的角度出发对Java设计模式的解读,虽然这些模式在实际编程中有非常广泛的应用,但从另一个角度来看,它们也能帮助我们更好地理解人际交往中的各种策略和技术。

    设计模式 让你轻松理解设计模式,提高开发效率

    解释器模式是一种行为型设计模式,它为特定语言的句子定义一个表示,并提供一个解释器来解释该语言的句子。该模式适用于当可以将一个需要解析或者翻译的问题表示成为一个特定类型的语法时。文章中通过“MM解释规则”...

    追MM与JAVA的23种设计模式

    框装起来,这就是 DECORATOR 了装饰器模式:装饰器模式允许动态地给一个...通过这些生动的比喻,我们可以更好地理解 Java 中的23种设计模式,它们在实际编程中有着广泛的应用,帮助我们构建更灵活、可维护的代码结构。

    Java的23种设计模式

    本文将通过一个有趣的视角——追MM的故事来解释Java中的23种设计模式,让读者能够在轻松愉快的氛围中理解和掌握这些模式。 #### 二、设计模式概述 设计模式是一种在面向对象编程中用来解决常见问题的模板。它们并...

    C#23种设计模式_示例源代码及PDF

    在解释器模式中需要定义一个代表 文法的命令类的等 级结构,也就是一系列的组合规则。每一个命令对象都有一个解释方法,代表对命令对象的 解释。命令对象的等级结构中的对象的任何排列组合都 是一个语言。 16、...

    23设计模式简讲

    以上是对23种设计模式中提及的部分模式进行了详细的解释与场景分析,旨在帮助读者更好地理解和应用这些设计模式。接下来将继续探讨剩下的几种模式。 ### 结构型模式续 9. **DECORATOR** - **场景解析**:为MM...

    Java设计模式

    “追MM与25种Java设计模式的联系”这个文件名可能以一种寓教于乐的方式阐述了如何将设计模式的概念应用到日常生活中,比如通过追求心仪对象的过程来比喻各种模式的运用。例如,使用策略模式可以灵活地调整追求策略,...

    23种Java设计模式

    在深入探讨23种Java设计模式之前,我们首先需要理解设计模式的概念及其在软件工程中的重要性。设计模式是软件开发中的一种通用解决方案,用于解决常见的设计问题,它描述了在特定情况下,如何解决问题,以及如何将...

    以轻松的语言比喻了java的23种模式

    中介者模式是一种行为型设计模式,它用一个中介对象来封装一系列的对象交互。中介者模式减少了对象之间的显式依赖,使你将对象解耦。 **比喻理解:** 想象一下,你在一个团队项目中,需要与多位MM合作完成任务。...

    slf4j完整日志文件

    SLF4J(Simple Logging Facade for Java)是Java中的一种日志门面(Logging Facade),它为各种日志框架提供了一个简单的统一接口,如Log4j、Java Util Logging (JUL)、Logback等。这个接口允许最终用户在部署时插入...

    Logback类库含logback.xml配置文件

    Logback 是为了提供更高效、更灵活的日志记录解决方案而设计的,它不仅继承了 Log4j 的优点,还解决了一些性能和可扩展性问题。在Java应用程序中,日志系统扮演着至关重要的角色,它帮助开发者调试代码,记录错误,...

    Spring Boot SLF4J日志实例 / Logback

    这个实例将围绕Spring Boot如何集成SLF4J(Simple Logging Facade for Java)和Logback进行详细讲解。 SLF4J是一个日志门面,提供了一种标准的日志API,允许我们在部署时选择不同的日志实现。Logback是SLF4J的一个...

    LogBack日志的使用

    LogBack是一款广泛应用于Java开发中的日志记录框架,由Ceki Gülcü(也是Log4j的创始人)设计。它提供了高效、灵活的日志记录功能,适用于各种规模的应用程序。LogBack是作为Log4j的替代品而创建的,旨在提供更好的...

    Log4J相关jar包.zip

    Log4J和SLF4J是Java编程语言中广泛使用的两个日志框架,它们在软件开发中扮演着至关重要的角色。日志系统是任何应用程序的关键组成部分,它帮助开发者记录、跟踪和分析程序运行时的事件,这对于调试、性能优化以及...

    log4j日志组件

    Log4j的设计理念是灵活、可配置和高性能,使得它成为Java应用中首选的日志框架。 ### 一、Log4j的基本结构 Log4j主要由三个核心组件组成: 1. **Logger(日志器)**:负责生成日志信息,它是日志系统中的主要接口...

Global site tag (gtag.js) - Google Analytics