`
cobrano1
  • 浏览: 27951 次
  • 性别: 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简单化。让最终的用户更简单的使用。而忽略了些细节问题。呵呵。

相关推荐

Global site tag (gtag.js) - Google Analytics