一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

簡單工廠模式和工廠方法模式

 ThinkTank_引擎 2014-06-18

一:簡單工廠模式

 

1,概念

簡單工廠模式是由一個工廠對象決定創(chuàng)建出哪一種產(chǎn)品類的實例。顧名思義工廠就是生產(chǎn)東西的,有原料(參數(shù)),模子(對象)就能生產(chǎn)出很多個具有相同功能的對象啦。

2,uml圖

 

3,代碼示例

  1. <span style="font-size:18px;">    class Program  
  2.     {  
  3.         static void Main(string[] args)  
  4.         {  
  5.             Operate oper;  //創(chuàng)建Operate類的oper類  
  6.             oper = OperationFactoty.createOperate("+"); //運用簡單工廠判斷實力化的對象  
  7.             oper.NumberA = 1;  //賦值  
  8.             oper.NumberB = 2;  
  9.             double result = oper.GetResult();  
  10.             Console.WriteLine(result);  //顯示運算結(jié)果  
  11.         }  
  12.     }  
  13.       
  14.     //簡單工廠,通過判斷參數(shù),實例化相應(yīng)的對象  
  15.     public class OperationFactoty    
  16.     {  
  17.         public static Operate createOperate(string operate)  
  18.         {  
  19.             Operate oper = null;  
  20.             switch (operate){  }  
  21.             return oper;  
  22.         }  
  23.     }  
  24.   
  25.     //定義一個運算基類,包含GetResult虛方法  
  26.     public class Operate //定義一個運算類  
  27.     {  
  28.         private double numberA=0;    //運算前的數(shù)  
  29.         private double numberB=0;    //運算后的數(shù)  
  30.         public double NumberA{  }  
  31.         public double NumberB{  }  
  32.         
  33.         public virtual double GetResult()//返回運算后結(jié)果的方法  
  34.         {  
  35.             return result;      //返回結(jié)果  
  36.         }  
  37.     }  
  38.   
  39.    // 運算類的四個繼承類,分別實現(xiàn)加減乘除四個運算  
  40.     public class NumberAdd : Operate    //加運算  
  41.     {  
  42.         public override double GetResult()//實現(xiàn)基類中的虛方法   
  43.         {  
  44.             double result = NumberA + NumberB;  
  45.             return result;  
  46.         }  
  47.     }  
  48.     public class NumberSub:Operate    //減運算  
  49.     {  
  50.         public override double  GetResult(){   }  
  51.     }  
  52.     public class NumberMul:Operate   //乘運算  
  53.     {  
  54.         public override double  GetResult(){   }  
  55.     }  
  56.     public class NumberDiv:Operate    //除運算  
  57.     {  
  58.         public override double GetResult(){   }  
  59.     }</span>  

 

4,總結(jié)

簡單工廠模式,我把它理解為一個模子,根據(jù)外界給定的原料,在加上自身封裝好的判斷,生產(chǎn)出不同類型的相應(yīng)的產(chǎn)品、對象。

簡單工廠模式使用場景:工廠類負責(zé)創(chuàng)建的對象比較少;客戶只知道傳入工廠類的參數(shù),對于如何創(chuàng)建對象(邏輯)不關(guān)心;簡單工廠很容易違反高內(nèi)聚低耦合原則,因此一般只在很簡單的情況下應(yīng)用。

 

 

二:工廠方法模式

 

1,概念

是定義一個創(chuàng)建產(chǎn)品對象的工廠接口,讓子類決定實例化哪一個類,將實際創(chuàng)建工作推遲到子類當(dāng)中。

 

2,uml圖

 

3,代碼實例

 

(1)工廠方法實現(xiàn)

  1. <span style="font-size:18px;">    class Program  
  2.     {  
  3.         static void Main(string[] args)  
  4.         {  
  5.             IFactory factory = new UndergraduateFactory();   //由接口創(chuàng)建新的學(xué)雷鋒大學(xué)生  
  6.             LeiFeng student = factory.CreateLeifeng();   //實例化  
  7.   
  8.             student.BuyRice();  
  9.             student.Sweep();  
  10.             student.Wash();  
  11.         }  
  12.     }  
  13.     //雷鋒類,定義了一些功能  
  14.     class LeiFeng    
  15.     {  
  16.         public void Sweep(){ } //擦桌子  
  17.         public void Wash(){ }  //洗衣服  
  18.         public void BuyRice(){ }  //買米  
  19.     }  
  20.   
  21.   
  22.     //學(xué)雷鋒的大學(xué)生  
  23.     class UnderGraduate : LeiFeng{ }  
  24.     //社區(qū)志愿者  
  25.     class Volunteer : LeiFeng{ }  
  26.   
  27.     //雷鋒工廠  
  28.     interface IFactory //定義一個接口,實現(xiàn)創(chuàng)建雷鋒類的功能  
  29.     {  
  30.         LeiFeng CreateLeifeng();  
  31.     }  
  32.       
  33.     class UndergraduateFactory : IFactory//學(xué)雷鋒大學(xué)生工廠  
  34.     {  
  35.         public LeiFeng CreateLeiFeng()  
  36.         {  
  37.             return new UnderGraduate();  
  38.         }  
  39.     }  
  40.     class VolunteerFactory : IFactory//社區(qū)志愿者工廠  
  41.     {  
  42.         public LeiFeng CreateLeiFeng()  
  43.         {  
  44.             return new Volunteer();  
  45.         }  
  46.     }</span>  

 

 (2)簡單工廠實現(xiàn)

  1. <span style="font-size:18px;">    class Program  
  2.     {  
  3.         static void Main(string[] args)  
  4.         {  
  5.             LeiFeng studentA = SimpleFactory.CreateLeiFeng("學(xué)雷鋒的大學(xué)生");//用簡單工廠創(chuàng)建并實例化學(xué)雷鋒的大學(xué)生  
  6.             studentA.BuyRice();  
  7.             LeiFeng studentB = SimpleFactory.CreateLeiFeng("社區(qū)志愿者");//用簡單工廠創(chuàng)建實例化社區(qū)志愿者  
  8.             studentB.BuyRice();  
  9.         }  
  10.     }  
  11.     //雷鋒類,定義了一些功能  
  12.     class LeiFeng    
  13.     {  
  14.         public void Sweep(){ } //擦桌子  
  15.         public void Wash(){ }  //洗衣服  
  16.         public void BuyRice(){ }  //買米  
  17.     }  
  18.   
  19.   
  20.     //簡單工廠類  
  21.     class SimpleFactory  
  22.     {  
  23.        public static LeiFeng CreateLeiFeng(string type)  
  24.        {  
  25.             LeiFeng result = null;  
  26.             switch (type) //判斷選擇要創(chuàng)建對象的類型  
  27.             {   
  28.                 case "學(xué)雷鋒的大學(xué)生":  
  29.                     result = new UnderGraduate();  
  30.                     break;  
  31.                 case "社區(qū)志愿者":  
  32.                    result = new UnderGraduate();  
  33.                    break;  
  34.             }  
  35.             return result;  
  36.         }  
  37.   
  38.     }</span>  


4,總結(jié)

 

    工廠方法模型中,“工廠”創(chuàng)建的是還沒有分化好的對象,其中沒有邏輯判斷相比于簡單工廠模式,基類工廠去實現(xiàn)接口,子工廠去實現(xiàn)判斷并能生產(chǎn)出相應(yīng)功能的對象。

 

三:簡單工廠和工廠方法模式的比較

 

1,簡單工廠模式

     專門定義一個工廠類負責(zé)創(chuàng)建其他類的實例,最大的優(yōu)點在于工廠類中包含了必要的邏輯,根據(jù)客戶需要的條件動態(tài)實例化相關(guān)的類

 

2,工廠方法模式

     創(chuàng)建對象的接口,讓子類去決定具體實例化的對象,把簡單的內(nèi)部邏輯判斷移到了客戶端代碼。工廠方法克服了簡單工廠違背開放-封閉原則的缺點,又保持了封裝對象創(chuàng)建過程的優(yōu)點。

 


 


 

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    人妻少妇系列中文字幕| 亚洲欧美日韩综合在线成成| 国产精品午夜福利免费阅读| 国产成人精品午夜福利| 一级片黄色一区二区三区| 欧美中文字幕一区在线| 亚洲欧美视频欧美视频| 亚洲av日韩一区二区三区四区| 日本一本在线免费福利| 日韩人妻精品免费一区二区三区| 好吊妞视频这里有精品| 十八禁日本一区二区三区| 久久国产精品熟女一区二区三区| 成人免费高清在线一区二区| 国产亚洲二区精品美女久久| 日韩欧美一区二区黄色| 久久精品a毛片看国产成人| 日本深夜福利在线播放| 中文字幕精品一区二区三| 老富婆找帅哥按摩抠逼视频| 日韩欧美国产亚洲一区| 日韩18一区二区三区| 免费在线播放一区二区| 九九热在线视频精品免费| 色一欲一性一乱—区二区三区| 国产美女网红精品演绎| 中文字幕一二区在线观看| 国产午夜精品久久福利| 欧美二区视频在线观看| 日韩国产亚洲欧美激情| 亚洲中文字幕在线观看四区| 精品一区二区三区人妻视频| 隔壁的日本人妻中文字幕版| 久久99午夜福利视频| 欧美一级特黄特色大色大片| 日韩日韩日韩日韩在线| 欧美午夜性刺激在线观看| 日韩精品在线观看完整版| 国产福利在线播放麻豆| 精品人妻一区二区四区| 欧美性猛交内射老熟妇|