`
风雪涟漪
  • 浏览: 507050 次
  • 性别: Icon_minigender_1
  • 来自: 大连->北京
博客专栏
952ab666-b589-3ca9-8be6-3772bb8d36d4
搜索引擎基础(Search...
浏览量:9009
Ae468720-c1b2-3218-bad0-65e2f3d5477e
SEO策略
浏览量:18388
社区版块
存档分类
最新评论

外观模式(Facade Pattern) 追MM

阅读更多

外观模式:

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

 

有一天女朋友想要去一个地方旅游。。旅游需要考虑很多很多的问题。如旅游的地点,航班,宾馆,饭店。我把所有的这些问题都扔给她了。。。假设简化旅游的行程。需要完成的步骤有

  • 计划旅游景点
  • 预定宾馆
  • 预定机票
  • 飞往目的地
  • 入住宾馆
  • 吃饭
  • 游玩

首先把旅游作为一个子系统,子系统包含4个类 ,分别如下。

航班

package facade.demo;
/**
 * 航班
 * @author Nicholas
 *
 */
public class Flight {
	public void scheduled(){
		System.out.println("预定机票");
	}
	
	public void go(){
		System.out.println("飞往目的地");
	}
}

宾馆

package facade.demo;
/**
 * 宾馆
 * @author Nicholas
 *
 */
public class Hotel {
	public void booking(){
		System.out.println("预定宾馆");
	}
	
	public void check(){
		System.out.println("入住宾馆");
	}
}

 旅游景点

package facade.demo;
/**
 * 旅游景点
 * @author Nicholas
 *
 */
public class Place {
	public void plan(){
		System.out.println("计划旅游景点");
	}
	
	public void play(){
		System.out.println("游玩");
	}
}

 饭店

 

package facade.demo;
/**
 * 饭店
 * @author Nicholas
 *
 */
public class Restaurant {
	public void eating(){
		System.out.println("吃饭");
	}
}
 

好了。。旅游真是个麻烦事情,我还是把这些麻烦扔给女朋友吧。。

女朋友

package facade.demo;
/**
 * 我的女朋友
 * @author Nicholas
 *
 */
public class Mygirl1 {
	private Flight flight;
	private Hotel hotel;
	private Place place;
	private Restaurant restaurant;

	
	public Mygirl1(Flight flight, Hotel hotel, Place place, Restaurant restaurant) {
		this.flight = flight;
		this.hotel = hotel;
		this.place = place;
		this.restaurant = restaurant;
	}
	
	
	public void travel(){
		place.plan();
		hotel.booking();
		flight.scheduled();
		flight.go();
		hotel.check();
		restaurant.eating();
		place.play();
	}
	
	public static void main(String[] args){
		Flight flight = new Flight();
		Hotel hotel = new Hotel();
		Place place = new Place();
		Restaurant restaurant = new Restaurant();
		Mygirl1 mygirl = new Mygirl1(flight,hotel,place,restaurant);
		mygirl.travel();
		
	}
	
}

结果如下:

计划旅游景点
预定宾馆
预定机票
飞往目的地
入住宾馆
吃饭
游玩

 

 

以上都是我的想象了。。。女朋友就是上帝啊。。。。。哎。如果真的那样做。。估计女朋友非弄死我。。。

到这里我们发现了个问题。女朋友要旅游需要关心那么多问题。。这些对她来说太复杂了。。她并不关心细节。只要她答到旅游的目的就好了。。。这时候,解决麻烦的人出现了。。。对,那就好我,我就是那个所谓的"外观"。我来把这些问题解决掉,让她享受旅游的过程就好了。

package facade.demo;

/**
 * 我(我就是外观了)
 * @author Nicholas
 *
 */
public class ManFacade {
	private Flight flight;
	private Hotel hotel;
	private Place place;
	private Restaurant restaurant;

       public ManFacade(){     
              this.flight = new Flight();
		this.hotel = new Hotel();
		this.place = new Place();
		this.restaurant = new Restaurant();
       }

	public ManFacade(Flight flight, Hotel hotel, Place place, Restaurant restaurant) {
		this.flight = flight;
		this.hotel = hotel;
		this.place = place;
		this.restaurant = restaurant;
	}
	
	
	public void travel(){
		place.plan();
		hotel.booking();
		flight.scheduled();
		flight.go();
		hotel.check();
		restaurant.eating();
		place.play();
	}
}
 

看来麻烦解决掉了。女朋友很轻松的享受旅游过程了。。。。

package facade.demo;

/**
 * 女朋友
 * @author Nicholas
 *
 */
public class Mygirl {

	public static void main(String[] args){
		Restaurant restaurant = new Restaurant();
		ManFacade manFacade = new ManFacade();//我来解决掉这些麻烦。。。
		manFacade.travel();//旅游成功
	}
	
}

结果如下:

计划旅游景点
预定宾馆
预定机票
飞往目的地
入住宾馆
吃饭
游玩

 

本身外观模式的作用就是让接口更容易使用。真实的场景要复杂的多,这个例子只能提供个表面的意思。

总的来说,外观模式就是为了使接口更简单。。。

 

 

 

分享到:
评论
12 楼 TaoistWar 2009-02-17  
wdlfellow 写道
#  public ManFacade(){      
#                 Flight flight = new Flight(); 
#         Hotel hotel = new Hotel(); 
#         Place place = new Place(); 
#         Restaurant restaurant = new Restaurant(); 
#        } 

写错了吧!
11 楼 wangneng_001 2009-02-17  
怎么看着像是对象适配模式。。。
10 楼 风雪涟漪 2009-02-16  
kimmking 写道
估计lz有很多个girls,

所以要编号,1,2,3,4,5,6,78。。。。。。。。。。

。。。。。。早知道用A,B,C,D,E了。。
9 楼 kimmking 2009-02-16  
估计lz有很多个girls,

所以要编号,1,2,3,4,5,6,78。。。。。。。。。。
8 楼 十一文 2009-02-16  
HAO好例子 有意思
不过不要用女朋友吗欺负我们没得啊
7 楼 yijingyong 2009-02-13  
     看了下,有意思..
6 楼 luoso 2009-02-13  
vvrao 写道
哈哈,就是没有明白为啥第一个例子里的mygirl 加了一个 1 。

估计是按键盘的时候手抖了一下
PS:怀疑楼主有女友恐惧症。
5 楼 vvrao 2009-02-13  
哈哈,就是没有明白为啥第一个例子里的mygirl 加了一个 1 。
4 楼 wdlfellow 2009-02-13  
挺好的呀,sql语句的整合也是facade的一个例子,我想说楼主思维很活跃~真怀疑是不是搞开发的robot
3 楼 风雪涟漪 2009-02-12  
娱乐一下么。呵呵。
2 楼 xuyao 2009-02-12  
干嘛非要跟mm联系在一起?很有意思吗?
1 楼 netalpha 2009-02-12  
我觉的你没领会外观的真谛~ 或者说这个例子不咋地

相关推荐

    设计模式之外观模式(Facade Pattern)

    **外观模式(Facade Pattern)**是一种结构型设计模式,它主要解决的是复杂系统或子系统对外暴露一个简单统一的接口,使得客户端无需关心内部复杂的交互细节。这种模式在实际开发中广泛应用,尤其在大型项目中,它能...

    外观模式(Facade Pattern)-结构型模式

    设计模式面面观(13):外观模式(Facade Pattern)-结构型模式 http://blog.csdn.net/fanweiwei/archive/2008/04/17/2299641.aspx

    外观模式 Facade Pattern

    ### 外观模式 (Facade Pattern) #### 概述 外观模式是一种重要的设计模式,属于结构型模式之一。其核心在于通过引入一个简单的接口来隐藏一个系统中存在的复杂性,从而简化了客户端对该系统的使用。该模式的主要...

    c++-设计模式之外观模式(Facade Pattern)

    外观模式(Facade Pattern)是一种结构型设计模式,用于为复杂子系统提供一个简单的接口。它通过封装系统内部的复杂性,提供一个统一的接口,使得客户端能够更加方便地使用子系统的功能。这种模式通常用于简化代码、...

    通过python实现外观模式(Facade Pattern).rar

    外观模式(Facade Pattern)是一种结构型设计模式,它为子系统中的一组接口提供一个统一的接口,使得子系统更容易使用。外观模式定义了一个高层接口,使得这一子系统更加容易使用。 压缩包文件代码是一个简单的 ...

    通过C++实现外观模式(Facade Pattern).rar

    在C++中,外观模式(Facade Pattern)同样用于为子系统中的一组接口提供一个统一的接口,使得子系统更容易使用。压缩包文件代码是一个简单的C++实现外观模式的示例。 1、定义各个子系统的类及其接口。 2、定义外观类...

    通过java实现外观模式(Facade Pattern).rar

    在Java中,外观模式(Facade Pattern)同样用于为子系统中的一组接口提供一个统一的接口,使得子系统更容易使用。压缩包文件代码是一个使用Java实现外观模式的简单示例。 1、定义各个子系统的接口及其实现类。 2、...

    设计模式之外观模式 facade

    外观模式(Facade Pattern)是设计模式中的一种结构型模式,主要目的是为了解决复杂的系统接口问题,提供一个简单的统一入口,使得客户端可以更方便地使用系统。在Java中,外观模式通常用来隐藏系统的复杂性,对外只...

    解析C#设计模式编程中外观模式Facade Pattern的应用

    外观模式(Facade Pattern)是设计模式中的一种结构型模式,其主要目的是为了简化客户端与复杂系统之间的交互。在C#编程中,外观模式通常用于减少客户端对子系统组件的依赖,提供一个统一的、高层次的接口,使得...

    设计模式 之 “门面模式[Facade Pattern]”

    门面模式(Facade Pattern)是软件工程中一种常用的结构型设计模式,它的主要目的是提供一个统一的接口,用来简化系统中一组复杂的接口或类的使用。这个模式将复杂的子系统接口封装在一个简单的门面对象中,使得...

    设计模式面面观(14):享元模式(Facade Pattern)-结构型模式

    设计模式面面观(14):享元模式(Facade Pattern)-结构型模式 http://blog.csdn.net/fanweiwei/archive/2008/04/25/2326692.aspx

    FacadePattern.unitypackage

    FacadePattern.unitypackage是C#版设计模式中的外观模式,采用unity举例和C#举例,详细说明了外观模式的用法。

    外观模式facade

    外观模式(Facade)是设计模式中的一种结构型模式,它为复杂的系统或子系统提供了一个统一的入口点,简化了客户端与系统之间的交互。通过外观模式,我们可以将系统的内部复杂性隐藏起来,使得用户只需要与一个简单的...

    Wrapper facade pattern

    **包装器外观模式(Wrapper Facade Pattern)** 包装器外观模式是一种软件设计模式,它将一个复杂的组件或者一组组件的接口进行简化,提供一个统一的、更易用的访问方式。这种模式通常用于隐藏底层系统的复杂性,为...

    C#面向对象设计模式纵横谈\11 结构型模式Facade外观模式.zip

    在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第11节:结构型模式Facade外观模式

    PHP设计模式(九)外观模式Facade实例详解【结构型】

    【外观模式(Facade)详解】 外观模式是一种结构型设计模式,其主要目的是为了解决复杂的系统划分成多个子系统后,如何降低子系统间的耦合度,提高系统的可维护性和可扩展性。它通过提供一个统一的接口,使得外部...

    C#面向对象设计模式纵横谈(11):Facade 外观模式(结构型模式) (Level 300)

    **外观模式(Facade Pattern)**是面向对象设计模式中的一种结构型模式,它提供了一个统一的接口,用于访问子系统中的各个部分。在C#编程中,外观模式可以帮助我们简化复杂的系统接口,使得客户端代码与复杂的内部...

    java 设计模式 Facade外观模式 Simple Factory 简单工厂模式

    外观模式是一种结构型设计模式,它的主要目标是提供一个统一的接口,用来简化对复杂系统的访问。在Java中,当你有一个复杂的子系统,而你希望客户端代码能够以一种更简洁、更易于理解的方式来与之交互时,就可以使用...

Global site tag (gtag.js) - Google Analytics