精华帖 (0) :: 良好帖 (3) :: 新手帖 (0) :: 隐藏帖 (6)
|
|
---|---|
作者 | 正文 |
发表时间:2009-02-12
最后修改:2009-02-18
外观模式:定义:它为子系统中的一组接口提供一个统一的高层接口。是的子系统更容易使用。
有一天女朋友想要去一个地方旅游。。旅游需要考虑很多很多的问题。如旅游的地点,航班,宾馆,饭店。我把所有的这些问题都扔给她了。。。假设简化旅游的行程。需要完成的步骤有
首先把旅游作为一个子系统,子系统包含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();//旅游成功 } } 结果如下: 计划旅游景点
本身外观模式的作用就是让接口更容易使用。真实的场景要复杂的多,这个例子只能提供个表面的意思。 总的来说,外观模式就是为了使接口更简单。。。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-02-12
我觉的你没领会外观的真谛~ 或者说这个例子不咋地
|
|
返回顶楼 | |
发表时间:2009-02-12
干嘛非要跟mm联系在一起?很有意思吗?
|
|
返回顶楼 | |
发表时间:2009-02-12
娱乐一下么。呵呵。
|
|
返回顶楼 | |
发表时间:2009-02-13
挺好的呀,sql语句的整合也是facade的一个例子,我想说楼主思维很活跃~真怀疑是不是搞开发的robot
|
|
返回顶楼 | |
发表时间:2009-02-13
哈哈,就是没有明白为啥第一个例子里的mygirl 加了一个 1 。
|
|
返回顶楼 | |
发表时间:2009-02-13
vvrao 写道 哈哈,就是没有明白为啥第一个例子里的mygirl 加了一个 1 。
估计是按键盘的时候手抖了一下 PS:怀疑楼主有女友恐惧症。 |
|
返回顶楼 | |
发表时间:2009-02-16
HAO好例子 有意思
不过不要用女朋友吗欺负我们没得啊 |
|
返回顶楼 | |
发表时间:2009-02-16
估计lz有很多个girls,
所以要编号,1,2,3,4,5,6,78。。。。。。。。。。 |
|
返回顶楼 | |
发表时间:2009-02-16
最后修改:2009-02-20
kimmking 写道 估计lz有很多个girls,
所以要编号,1,2,3,4,5,6,78。。。。。。。。。。 。。。。。。早知道用A,B,C,D,E了。。 |
|
返回顶楼 | |