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

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

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

    silvermyth

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      1 隨筆 :: 12 文章 :: 1 評論 :: 0 Trackbacks
    從應用的角度來看,適配器模式在代碼中應用的機會并不多。但從生活角度看,非常直觀生動,容易理解。去過美國的朋友都知道在去之前需要準備一個電源的轉換器,因為美國的插座格式和中國的不同,需要在中間做一個轉換,這是一個非常經典的適配器模式的例子。適配器模式就是把不適應的接口變成適應(或者叫做期望)的接口。
    我原來有一個同事,名字叫做Garin,從小就會洗衣服,但是不會做飯;第一次找了個女朋友,結果人家女孩要求基本條件就是會洗衣做飯。
    1 public interface IIdealBoyFriend {
    2     public void doCooking();
    3     public void doWashing();
    4 }
    5 
    一看不對呀,接口不匹配,怎么辦,簡單,適配吧:
     1 public class BoyCanWashClothes {
     2     
     3     private String name = null
     4     
     5     public void doWashing(){
     6         System.out.println(name +" 費了九牛二虎之力總算洗完了衣服,好累啊。");
     7     }
     8 
     9     public BoyCanWashClothes(String name) {
    10         super();
    11         this.name = name;
    12     }
    13     
    14 }
    只會做飯,不會洗衣服;適配以后:
     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+"找了個菜譜,倒騰了半天,終于把飯做熟了。");
    10     }
    11 
    12 }
    妥了,學會做飯了。細心的同學可能發現,上面的例子其實是類的適配器模式,不但Garin能適配,Tom也能,James也可以。話說Garin用適配器模式搖身一變,會做飯了,但是由于缺乏修煉(還要花大量時間洗女朋友的臟衣服),飯菜味道不地道,女朋友和他吹了。又過了一段時間,Garin又找了個新的女朋友,還是得會洗衣做飯,而且規定衣服不能機洗,只能手洗。這回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+" 聚精會神做菜,滿滿的都是愛,飯菜非常可口。");
    19     }
    20 
    21     @Override
    22     public void doWashing() {
    23         System.out.print(name+" 叫了自己表弟來幫忙洗衣服,");
    24         worker.doWashing();
    25     }
    26 
    27 }
    這回對于洗衣服這活,Garin學精了,不親自動手了,叫了一個外援;結果由于節省了大量洗衣服時間,廚藝那是突飛猛進,女朋友非常滿意,成功進入下一階段。這個就是對象的適配器模式了,并不是所有人都有一個善于洗衣服的表弟。結果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         //使用對象的代理模式
    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) 評論(0)  編輯  收藏 所屬分類: 設計模式
    主站蜘蛛池模板: 蜜桃传媒一区二区亚洲AV| 亚洲精品美女久久7777777| 51午夜精品免费视频| 免费少妇a级毛片人成网| 一区二区三区精品高清视频免费在线播放 | 亚洲五月激情综合图片区| 中文字幕高清免费不卡视频| 亚洲AV无码乱码在线观看性色扶| 美女裸免费观看网站| 免费v片视频在线观看视频| 人妻巨大乳hd免费看| 伊人婷婷综合缴情亚洲五月| 久久嫩草影院免费看夜色| 国产亚洲一区二区在线观看| 久久免费精彩视频| 亚洲高清在线mv| 色视频色露露永久免费观看| 日本系列1页亚洲系列| 国产亚洲AV夜间福利香蕉149| 在线观看免费视频网站色| 亚洲综合免费视频| 欧洲精品免费一区二区三区| 无码精品人妻一区二区三区免费 | 亚洲午夜精品久久久久久人妖| 91嫩草免费国产永久入口| 2017亚洲男人天堂一| 亚洲精品视频在线看| 91精品国产免费网站| 亚洲国产无线乱码在线观看| 亚洲一区二区三区在线视频| 日韩精品无码免费一区二区三区| 亚洲午夜国产精品| 又粗又大又硬又爽的免费视频| a级毛片100部免费观看| 亚洲不卡中文字幕| 亚洲av成人一区二区三区在线观看| 国产午夜无码精品免费看动漫| 亚洲精品美女网站| 亚洲日韩精品一区二区三区无码| 99久久99这里只有免费费精品| 人成电影网在线观看免费|