<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    silvermyth

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      1 隨筆 :: 12 文章 :: 1 評(píng)論 :: 0 Trackbacks
    從應(yīng)用的角度來(lái)看,適配器模式在代碼中應(yīng)用的機(jī)會(huì)并不多。但從生活角度看,非常直觀生動(dòng),容易理解。去過(guò)美國(guó)的朋友都知道在去之前需要準(zhǔn)備一個(gè)電源的轉(zhuǎn)換器,因?yàn)槊绹?guó)的插座格式和中國(guó)的不同,需要在中間做一個(gè)轉(zhuǎn)換,這是一個(gè)非常經(jīng)典的適配器模式的例子。適配器模式就是把不適應(yīng)的接口變成適應(yīng)(或者叫做期望)的接口。
    我原來(lái)有一個(gè)同事,名字叫做Garin,從小就會(huì)洗衣服,但是不會(huì)做飯;第一次找了個(gè)女朋友,結(jié)果人家女孩要求基本條件就是會(huì)洗衣做飯。
    1 public interface IIdealBoyFriend {
    2     public void doCooking();
    3     public void doWashing();
    4 }
    5 
    一看不對(duì)呀,接口不匹配,怎么辦,簡(jiǎn)單,適配吧:
     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也可以。話說(shuō)Garin用適配器模式搖身一變,會(huì)做飯了,但是由于缺乏修煉(還要花大量時(shí)間洗女朋友的臟衣服),飯菜味道不地道,女朋友和他吹了。又過(guò)了一段時(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ì)神做菜,滿滿的都是愛(ài),飯菜非常可口。");
    19     }
    20 
    21     @Override
    22     public void doWashing() {
    23         System.out.print(name+" 叫了自己表弟來(lái)幫忙洗衣服,");
    24         worker.doWashing();
    25     }
    26 
    27 }
    這回對(duì)于洗衣服這活,Garin學(xué)精了,不親自動(dòng)手了,叫了一個(gè)外援;結(jié)果由于節(jié)省了大量洗衣服時(shí)間,廚藝那是突飛猛進(jìn),女朋友非常滿意,成功進(jìn)入下一階段。這個(gè)就是對(duì)象的適配器模式了,并不是所有人都有一個(gè)善于洗衣服的表弟。結(jié)果Garin通過(guò)歷練,順利從純情少男蛻變。
     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成長(zhǎng)中");
    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 閱讀(97) 評(píng)論(0)  編輯  收藏 所屬分類: 設(shè)計(jì)模式
    主站蜘蛛池模板: 亚洲理论电影在线观看| 亚洲高清视频免费| 日本中文字幕免费高清视频| 中文字幕亚洲色图| 国产三级电影免费观看| A片在线免费观看| 久久国产亚洲精品| 亚洲人成无码www久久久| 99在线精品视频观看免费| 色在线亚洲视频www| 亚洲国产精品无码久久久久久曰 | 亚洲福利精品一区二区三区| 免费视频精品一区二区三区 | 亚洲aⅴ无码专区在线观看 | 亚洲熟女乱综合一区二区| 午夜免费福利视频| 久久亚洲色WWW成人欧美| 亚洲AV无码专区国产乱码电影| 啦啦啦手机完整免费高清观看| a级大片免费观看| 亚洲欧美精品午睡沙发| 亚洲欧洲日产国码av系列天堂 | 免费看无码特级毛片| 亚洲不卡影院午夜在线观看| 亚洲国产日韩在线视频| 热99re久久免费视精品频软件| 久久久高清日本道免费观看| 国产成人亚洲综合a∨| 亚洲伊人tv综合网色| 国产亚洲自拍一区| 午夜两性色视频免费网站| 日韩精品久久久久久免费| 边摸边吃奶边做爽免费视频网站| 亚洲成av人片在线看片| 亚洲一区二区三区自拍公司| 欧洲精品免费一区二区三区| 99re免费在线视频| a毛片免费全部播放完整成| 在线观看免费亚洲| 2020国产精品亚洲综合网| 亚洲网站在线观看|