silvermyth

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            1 隨筆 :: 12 文章 :: 1 評(píng)論 :: 0 Trackbacks
          從應(yīng)用的角度來看,適配器模式在代碼中應(yīng)用的機(jī)會(huì)并不多。但從生活角度看,非常直觀生動(dòng),容易理解。去過美國的朋友都知道在去之前需要準(zhǔn)備一個(gè)電源的轉(zhuǎn)換器,因?yàn)槊绹牟遄袷胶椭袊牟煌枰谥虚g做一個(gè)轉(zhuǎn)換,這是一個(gè)非常經(jīng)典的適配器模式的例子。適配器模式就是把不適應(yīng)的接口變成適應(yīng)(或者叫做期望)的接口。
          我原來有一個(gè)同事,名字叫做Garin,從小就會(huì)洗衣服,但是不會(huì)做飯;第一次找了個(gè)女朋友,結(jié)果人家女孩要求基本條件就是會(huì)洗衣做飯。
          1 public interface IIdealBoyFriend {
          2     public void doCooking();
          3     public void doWashing();
          4 }
          5 
          一看不對(duì)呀,接口不匹配,怎么辦,簡單,適配吧:
           1 public class BoyCanWashClothes {
           2     
           3     private String name = null
           4     
           5     public void doWashing(){
           6         System.out.println(name +" 費(fèi)了九牛二虎之力總算洗完了衣服,好累啊。");
           7     }
           8 
           9     public BoyCanWashClothes(String name) {
          10         super();
          11         this.name = name;
          12     }
          13     
          14 }
          只會(huì)做飯,不會(huì)洗衣服;適配以后:
           1 public class PuteBoy extends BoyCanWashClothes implements IIdealBoyFriend{
           2 
           3     public PuteBoy(String name) {
           4         super(name);
           5     }
           6 
           7     @Override
           8     public void doCooking() {
           9         System.out.println(name+"找了個(gè)菜譜,倒騰了半天,終于把飯做熟了。");
          10     }
          11 
          12 }
          妥了,學(xué)會(huì)做飯了。細(xì)心的同學(xué)可能發(fā)現(xiàn),上面的例子其實(shí)是類的適配器模式,不但Garin能適配,Tom也能,James也可以。話說Garin用適配器模式搖身一變,會(huì)做飯了,但是由于缺乏修煉(還要花大量時(shí)間洗女朋友的臟衣服),飯菜味道不地道,女朋友和他吹了。又過了一段時(shí)間,Garin又找了個(gè)新的女朋友,還是得會(huì)洗衣做飯,而且規(guī)定衣服不能機(jī)洗,只能手洗。這回Garin該怎么辦呢,答案還是適配器模式,但是方法要變一變:
           1 public class SmartBoy implements IIdealBoyFriend {
           2 
           3     private String name = null;
           4     
           5     public SmartBoy(String name) {
           6         super();
           7         this.name = name;
           8     }
           9 
          10     public void callHelp(BoyCanWashClothes worker){
          11         this.worker = worker;
          12     }
          13     
          14     private BoyCanWashClothes worker = null;
          15     
          16     @Override
          17     public void doCooking() {
          18         System.out.println(name+" 聚精會(huì)神做菜,滿滿的都是愛,飯菜非常可口。");
          19     }
          20 
          21     @Override
          22     public void doWashing() {
          23         System.out.print(name+" 叫了自己表弟來幫忙洗衣服,");
          24         worker.doWashing();
          25     }
          26 
          27 }
          這回對(duì)于洗衣服這活,Garin學(xué)精了,不親自動(dòng)手了,叫了一個(gè)外援;結(jié)果由于節(jié)省了大量洗衣服時(shí)間,廚藝那是突飛猛進(jìn),女朋友非常滿意,成功進(jìn)入下一階段。這個(gè)就是對(duì)象的適配器模式了,并不是所有人都有一個(gè)善于洗衣服的表弟。結(jié)果Garin通過歷練,順利從純情少男蛻變。
           1 public class GirlFriendTest {
           2 
           3     /**
           4      * @param args
           5      */
           6     public static void main(String[] args) {
           7         //使用類的代理模式
           8         IIdealBoyFriend garin = new PuteBoy("Garin");
           9         garin.doCooking();
          10         garin.doWashing();
          11         System.out.println("Garin成長中");
          12         //使用對(duì)象的代理模式
          13         garin = new SmartBoy("Garin");
          14         ((SmartBoy)garin).callHelp(new BoyCanWashClothes("Garin 表弟"));
          15         garin.doCooking();
          16         garin.doWashing();
          17     }
          18 
          19 }
          posted on 2015-07-27 22:51 Gavin Li 閱讀(100) 評(píng)論(0)  編輯  收藏 所屬分類: 設(shè)計(jì)模式
          主站蜘蛛池模板: 马龙县| 黄石市| 梁河县| 新疆| 新宾| 庆城县| 宜春市| 兴业县| 板桥市| 庆安县| 建始县| 岫岩| 买车| 讷河市| 南康市| 钟祥市| 广州市| 通江县| 汉寿县| 陆河县| 云霄县| 鸡东县| 金华市| 农安县| 伊宁市| 杂多县| 汝州市| 南陵县| 民勤县| 贵港市| 怀安县| 安陆市| 衡水市| 确山县| 根河市| 修文县| 长阳| 榆树市| 七台河市| 永州市| 阿拉尔市|