看过 风雪涟漪兄写过一篇《外观模式(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...