<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      設(shè)計(jì)模式培訓(xùn)之三:抽象工廠

      查看本人文章索引請(qǐng)通過(guò)http://www.rzrgm.cn/seesea125/archive/2012/04/17/2453256.html

      在工廠方法里講到了加減乘除的例子,請(qǐng)查閱http://www.rzrgm.cn/seesea125/archive/2012/05/02/2478981.html

       

      一、抽象工廠的定義

      提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無(wú)須指定它們的具體類。

      二、實(shí)現(xiàn)思路

      實(shí)現(xiàn)思路:如果說(shuō)簡(jiǎn)單工廠與工廠方法是對(duì)同一個(gè)問(wèn)題的兩種不同的解決方法的話,抽象工廠就是解決一系列這種問(wèn)題的方法。因?yàn)槠渲饕淖饔镁褪巧a(chǎn)一系列相互依賴的對(duì)象,而不用去關(guān)心它們具體的實(shí)現(xiàn)。

      無(wú)標(biāo)題

      三、代碼實(shí)現(xiàn)

      為了方便查看工廠方法和抽象工廠的區(qū)別,因此還以工廠方法的例子為例,做進(jìn)一步擴(kuò)展。

      在工廠方法里,工廠方法的核心代碼如下:

      public interface IFactory
          {
              Operation Create();
          }
          public class AddOperation : IFactory
          {
              public Operation Create()
              {
                  return new OperationAdd();
              }
          }
          public class SubOperation : IFactory
          {
              public Operation Create()
              {
                  return new OperationSub();
              }
          }
      
          public abstract class Operation
          {
              public double NumA { get; set; }
              public double NumB { get; set; }
              public abstract double GetResult();
          }
          public class OperationAdd : Operation
          {
              public override double GetResult()
              {
                  return NumA + NumB;
              }
          }
          public class OperationSub : Operation
          {
              public override double GetResult()
              {
                  return NumA - NumB;
              }
          }

       

      假設(shè)這個(gè)加減運(yùn)算是中國(guó)人的運(yùn)算方法,美國(guó)人加減運(yùn)算不是這么算的,比如美國(guó)人的加法,是NumA + NumB+10,美國(guó)人的減法是NumA - NumB-10,呵呵,這只是假設(shè),目的是方便我們看工廠方法和抽象工廠的區(qū)別,當(dāng)然現(xiàn)實(shí)中不可能發(fā)生。

      為了區(qū)分,我們把OperationAdd,OperationSub 分別改為ChinaOperationAdd,ChinaOperationSub,同時(shí)實(shí)現(xiàn)美國(guó)人的加法和減法AmericaOperationAdd,AmericaOperationSub,這兩個(gè)方法也同樣繼承自O(shè)peration,代碼如下:

      public abstract class Operation
          {
              public double NumA { get; set; }
              public double NumB { get; set; }
              public abstract double GetResult();
          }
          public class ChinaOperationAdd : Operation
          {
              public override double GetResult()
              {
                  return NumA + NumB;
              }
          }
          public class ChinaOperationSub : Operation
          {
              public override double GetResult()
              {
                  return NumA - NumB;
              }
          }
      
          public class AmericaOperationAdd : Operation
          {
              public override double GetResult()
              {
                  return NumA + NumB+10;
              }
          }
          public class AmericaOperationSub : Operation
          {
              public override double GetResult()
              {
                  return NumA - NumB-10;
              }
          }

       

      接下來(lái)我們把AddOperation 和SubOperation 這兩個(gè)繼承自IFactory的類,給改造一下,定義一個(gè)新的類ChinaOperationFactroy,這個(gè)新類里返回兩個(gè)操作,分別是AddOperation,SubOperation,代碼如下:

      public class ChinaOperationFactroy
          {
              public Operation AddOperation()
              {
                  return new ChinaOperationAdd();
              }
      
              public Operation SubOperation()
              {
                  return new ChinaOperationSub();
              }
          }

       

       

      再建一個(gè)美國(guó)的工廠,也是返回美國(guó)的加法和減法的實(shí)例,代碼如下:

      public class AmericaOperationFactroy
          {
              public Operation AddOperation()
              {
                  return new AmericaOperationAdd();
              }
      
              public Operation SubOperation()
              {
                  return new AmericaOperationSub();
              }
          }

       

      到現(xiàn)在為止,ChinaOperationFactroy,AmericaOperationFactroy的代碼很相似,他們都是返回了AddOperation和SubOperation方法,因此把他們抽象出來(lái),建議一個(gè)抽象工廠

      public abstract class AbstractFactory
          {
              public static AbstractFactory GetInstance()
              {
                  AbstractFactory instance = new AmericaOperationFactroy();
                  return instance;
              }
              public abstract Operation AddOperation();
              public abstract Operation SubOperation();
          }

       

      然后讓ChinaOperationFactroy和AmericaOperationFactroy繼承這個(gè)工廠,改進(jìn)后代碼如下

      public class ChinaOperationFactroy : AbstractFactory
          {
              public override Operation AddOperation()
              {
                  return new ChinaOperationAdd();
              }
      
              public override Operation SubOperation()
              {
                  return new ChinaOperationSub();
              }
          }
      
          public class AmericaOperationFactroy : AbstractFactory
          {
              public override Operation AddOperation()
              {
                  return new AmericaOperationAdd();
              }
      
              public override Operation SubOperation()
              {
                  return new AmericaOperationSub();
              }
          }

       

       

      此時(shí)抽象工廠已經(jīng)完成了,客戶端調(diào)用

      AbstractFactory af = AbstractFactory.GetInstance();
                  Operation oper = af.AddOperation();
                  oper.NumA = 3;
                  oper.NumB = 2;
                  double result = oper.GetResult();
                  Response.Write(result);

       

      這個(gè)時(shí)候如果我們想調(diào)用中國(guó)的加法和減法,只需要把抽象地方改下,改動(dòng)一個(gè)標(biāo)紅的地方即可,改動(dòng)后,加法和減法運(yùn)算都變成中國(guó)的了

      public abstract class AbstractFactory
          {
              public static AbstractFactory GetInstance()
              {
                  AbstractFactory instance = new ChinaOperationFactroy();
                  return instance;
              }
              public abstract Operation AddOperation();
              public abstract Operation SubOperation();
          }

       

      這種改動(dòng)可以通過(guò)反射來(lái)搞定它,這樣就只需要修改配置文件就可以了,反射在工廠方法里已經(jīng)介紹,就不再多寫了。

      四、工廠與抽象工廠的對(duì)比

      由代碼也可以看出,抽象工廠解決的是創(chuàng) 建一系列有共同風(fēng)格的產(chǎn)品(魯菜還是粵菜),而工廠方法模式解決的創(chuàng)建有共同特征的一系列產(chǎn)品(紅燒肉、清蒸魚它們都是食物)。

      posted @ 2012-05-11 14:44  趙學(xué)智  閱讀(2769)  評(píng)論(7)    收藏  舉報(bào)
      主站蜘蛛池模板: 国产一区在线播放av| 精品无码成人久久久久久| 国产av普通话对白国语| 欧美丰满熟妇xxxx性| 自拍偷自拍亚洲精品播放| 国产MD视频一区二区三区 | 国产无吗一区二区三区在线欢| 国产精品午夜福利在线观看| 久久五月丁香合缴情网| 国产一区二区高清不卡| 亚洲岛国av一区二区| 大胆欧美熟妇xxbbwwbw高潮了| 四虎成人在线观看免费| 国产一区二区三区色视频| 国内精品无码一区二区三区| 欧美性猛交xxxx乱大交丰满| 日韩av一区二区三区在线| 日本亚洲色大成网站www久久 | 国产真实交换配乱婬95视频| 久久午夜无码免费| 精品国产免费一区二区三区香蕉| 农村老熟妇乱子伦视频| 少妇无套内谢免费视频| 国产精品中文av专线| 亚洲男人的天堂网站| 欧美亚洲国产日韩一区二区| 成人亚洲性情网站www在线观看| 污污网站18禁在线永久免费观看 | 日韩伦理片一区二区三区| 一本大道卡一卡二卡三乱码全集资源| 日本一道一区二区视频| 亚洲国产精品成人综合色在| 特级av毛片免费观看| 国产在线精品中文字幕| 麻豆国产成人AV在线播放| 鹿邑县| 女人香蕉久久毛毛片精品| 中文字幕国产精品日韩| 亚洲国产欧美在线看片一国产 | 九九热在线观看视频精品| 国产亚洲日韩在线aaaa|