亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

設計模式(1)---簡單工廠模式

2019-11-14 16:46:29
字體:
來源:轉載
供稿:網友

  引言:

  從接觸編碼到現在有一段時間了,總是在為一些基礎語法、技能而不斷學習,學著學著感覺有些茫然。在上一篇曾經說過一大牛的教誨:“c語言、java語言、C#語言這些都是一些基本的工具,而它們其中的語法、技能都是一些很簡單的基礎知識,剛接觸編碼時肯定會有很多的知識、技能你不懂,但你只要碰到并且學習肯定能夠熟練使用。所以語言、技能都不重要,重要的是脫離語言工具的思想,編程的思想。設計模式是思想的體現,多多學習肯定沒錯”。這之后一直在看設計模式方面的書,但“紙上得來終覺淺,絕知此事要躬行”,于是想把看的書、評論、博客等一些東西總結到一塊摘寫出來,加深印象同時方便學習。現在開始第一篇:簡單工廠模式。

  定義:

  定義一個類專門負責創建其他類的實例,具體創建什么實例由傳入的參數而決定,并且這些類都共同繼承于一個父類或者有共同的接口。簡單工廠模式是工廠模式家族中最簡單的一種實用模式,也可以說是不同工廠模式的一個特殊實現。

  簡單工廠符合面向對象重要原則之一:封裝改變。

 

  參與者:

  工廠角色Creator:模式的核心,負責創建所有實例,根據傳入的參數,決定創建什么類型的實例。

  抽象產品角色PRoduct:上述所有類的父類或者是接口。

  具體產品角色Concrete Product:由工廠類創建出來的具體的產品實例。

 

  UML圖:

  

 

  舉例說明:

  列舉大話設計模式中的一個計數器例子,制作一個計數器,進行加減乘除運算。

  

  抽象產品角色:父類(運算類) 

public class Operation    {        private double numberA = 0;        private double numberB = 0;        public double NumberA        {            get { return numberA; }            set { numberA = value; }        }        public double NumberB        {            get { return numberB; }            set { numberB = value; }        }        public virtual double GetResult()        {            double result = 0;            return result;        }    }

  

  具體產品角色:子類(加減乘除) 

class OperationAdd : Operation    {        public override double GetResult()        {            double result = 0;            result = NumberA + NumberB;            return result;        }    }    class OperationSub : Operation    {        public override double GetResult()        {            double result = 0;            result = NumberA - NumberB;            return result;        }    }    class OperationMul : Operation    {        public override double GetResult()        {            double result = 0;            result = NumberA * NumberB;            return result;        }    }    class OperationDiv : Operation    {        public override double GetResult()        {            double result = 0;            if (NumberB == 0)            {                throw new Exception("除數不能為0");            }            result = NumberA / NumberB;            return result;        }    }

 

  工廠角色:建造各種實例

public class OperationFactory    {        public static Operation CreateOperate(string operate)        {            Operation operation = null;            switch (operate)            {                 case "+":                    operation = new OperationAdd();                    break;                case "-":                    operation = new OperationSub();                    break;                case "*":                    operation = new OperationMul();                    break;                case "/":                    operation = new OperationDiv();                    break;            }            return operation;        }    }

 

  客戶端調用: 

static void Main(string[] args)        {            Operation operation;            operation = OperationFactory.CreateOperate("-");            operation.NumberA = 3;            operation.NumberB = 7;            double result = operation.GetResult();            Console.WriteLine(result);            Console.ReadLine();        }

  

  到此,一個簡單的計數器實例編寫完畢??蛻舳讼蚬S類傳入參數“-”,工廠類根據傳入的參數創建具體的產品實例,然后進行運算。

 

  簡單工廠模式優點:

  簡單工廠模式解決了客戶端直接依賴于具體對象的問題,客戶端可以消除直接創建對象的責任,而僅僅是消費產品?! 〉婉詈希c外界具體產品類分開。

  實現代碼復用。

 

  缺點:

  違反了高內聚的原則,直接導致:如果需要創建新的類,也就必須改變工廠類。

  

  適用場合:

  適用于創建的對象比較少的情況;

  適用于客戶端只負責傳入參數而不關心創建實例的內部邏輯。

 

補充:

  看的設計模式第一個就是簡單工廠模式,但是實際項目中一直沒有用,前幾天一個同事為了解決項目問題用了簡單工廠模式,事后跟他一討論才知道,那哥們比較牛,沒有看過設計模式,就是根據自己的想象寫出一個小架構,符合簡單工廠模式。此處只是為了加速對簡單工廠模式的理解,大致講解該項目的系統框架。

該項目是:為了集合多廠商產品SDK而開發出來的一套產品,目前僅有A和B廠商的SDK。編寫簡單框架,滿足擴展要求,實現產品功能。

首先編寫一個接口類:

interface IMethod{   void method1();   void method2();      }

其次是A和B廠商都繼承IMethod接口:

class A:IMethod{  void method1()  {     //user ASDK          }     void method2()  {     //user ASDK          }      }class B:IMethod{  void method1()  {     //user BSDK          }     void method2()  {     //user BSDK          }  }

 

工廠類,即決定調用什么方法:

class Factory{    public char factorySDK;    public Factory(char factorySDK)    {         this.factorySDK = factorySDK;    }      public IMethod  CreateSDK(char factorySDK)    {           IMethod method = null;            switch(factorySDK)            {                     case ASDK:                            method = new  A();                             break;                       case BSDK:                            method = new  B();                             break;                      default:                               break;            }            return method;    }  

  public void Method1()
  {
    method.Method1();
  }

  
  public void Method2()
  {
    method.Method2();
  }

}

 

  如果下次需要把C廠商產品的SDK也集中進去,如果沒有新的需求,那么便不需要增加新的方法,只需要建造一個C類,繼承IMethod接口。同時在工廠類中新增一個new C即可。通過此項目,從理論方面學習設計模式進入到實際的項目實踐中去,雖然是看到別人寫的,但最自己也是一個不小的收獲。

 

 

 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲免费伊人电影在线观看av| 欧美小视频在线观看| 亚洲人午夜精品| 日本免费在线精品| 精品在线观看国产| 亚洲人午夜精品| 亚洲自拍欧美另类| 成人黄色片在线| xx视频.9999.com| 国产精品久久久久久久久久久新郎| 亚洲级视频在线观看免费1级| 亚洲自拍av在线| 欧美一级电影免费在线观看| 亚洲美女性生活视频| 一区二区日韩精品| 亚洲一区二区在线播放| 日韩在线播放av| 亚洲嫩模很污视频| 亚洲最大福利视频网站| 一区二区在线视频播放| 亚洲电影免费观看高清完整版| 欧美理论片在线观看| 欧美日韩美女在线| 5278欧美一区二区三区| 亚洲精品v欧美精品v日韩精品| 亚洲福利视频网站| 亚洲深夜福利在线| 欧洲一区二区视频| 亚洲精选一区二区| 国产亚洲欧美日韩精品| 在线观看日韩专区| 高清亚洲成在人网站天堂| 亚洲综合在线做性| 欧美专区日韩视频| 国产97在线视频| 538国产精品视频一区二区| 亚洲日本欧美中文幕| 日韩av电影手机在线| 久久精品99无色码中文字幕| 亚洲国产日韩一区| 91视频免费在线| 成年无码av片在线| 亚洲第一福利在线观看| 久久久91精品国产| 国产一区二区黄| 夜夜嗨av一区二区三区四区| 日韩精品在线免费观看| 久久在线观看视频| 亚洲国产欧美一区二区三区同亚洲| 91久久嫩草影院一区二区| 欧美性极品少妇精品网站| 国产精品成人久久久久| 久久中文字幕在线视频| 国产精品久久久久高潮| 欧美性猛交xxxx富婆弯腰| 日韩中文av在线| 亚洲美女www午夜| 久久成人综合视频| 97人人模人人爽人人喊中文字| 91在线视频精品| 亚洲精品在线91| 亚洲欧美国产精品久久久久久久| 日韩精品在线电影| 国产亚洲xxx| 精品美女久久久久久免费| 97在线精品国自产拍中文| 成人自拍性视频| 日韩有码在线观看| 国产亚洲成精品久久| 成人xvideos免费视频| 欧美日韩精品中文字幕| 亚洲天堂色网站| 91精品国产91久久| 97碰碰碰免费色视频| 一区二区三区精品99久久| 欧美性生交xxxxx久久久| 91精品综合视频| 亚洲激情视频在线播放| 亚洲欧美中文字幕在线一区| 日韩电影中文 亚洲精品乱码| 久久人人爽亚洲精品天堂| 国产成人精品国内自产拍免费看| 国产精品扒开腿做爽爽爽的视频| 亚洲va电影大全| 亚洲黄一区二区| 亚洲国产欧美一区二区丝袜黑人| 精品亚洲一区二区三区在线播放| 久久综合久久八八| 日韩精品在线观看一区| 精品视频久久久| 日韩精品在线观看一区| 亚洲最新av在线| 亚洲福利视频二区| 久久青草精品视频免费观看| 欧美午夜影院在线视频| 国产免费一区视频观看免费| 亚洲成人黄色在线观看| 日韩av在线网页| 日韩激情视频在线播放| 亚洲精品少妇网址| 伊人精品在线观看| 久热精品视频在线观看一区| 久久久久久久久久久免费精品| 亚洲色图av在线| 疯狂做受xxxx欧美肥白少妇| 国模极品一区二区三区| 77777亚洲午夜久久多人| 欧美裸体xxxx极品少妇| 欧美亚洲成人xxx| 亚洲视频在线观看免费| 亚洲www在线| 欧洲亚洲女同hd| 国产精品海角社区在线观看| 久久久久久有精品国产| 精品视频在线播放色网色视频| 视频在线观看99| 国产精品视频在线观看| 精品高清一区二区三区| 国产精品手机播放| 国产一区二中文字幕在线看| 国产精品aaaa| 日韩精品免费一线在线观看| 亚洲国产成人精品女人久久久| 久久天天躁日日躁| 日韩精品免费视频| 国产视频精品免费播放| 国产精品一区久久| 欧美日韩中文字幕在线视频| 日韩精品视频三区| 国产亚洲精品美女| 国产精品久久久久久久久久久久久久| 午夜精品美女自拍福到在线| 欧美高清电影在线看| 欧美大片免费观看在线观看网站推荐| 日韩在线观看免费全| 精品露脸国产偷人在视频| 国产精品高潮呻吟久久av野狼| 亚洲天堂av综合网| 日韩av在线免费观看一区| 欧美精品一区二区三区国产精品| 欧美电影免费在线观看| 95av在线视频| 欧美视频一区二区三区…| 狠狠色狠狠色综合日日五| 亚洲精品91美女久久久久久久| 91精品啪aⅴ在线观看国产| 欧美理论在线观看| 久久精品精品电影网| 亚洲成人网久久久| 国产黑人绿帽在线第一区| 美女啪啪无遮挡免费久久网站| 日韩经典第一页| 亚洲激情小视频| 国产精品视频内| 国产视频久久网| 亚洲欧美日韩成人| 国产97在线播放| 欧美天天综合色影久久精品| 午夜欧美大片免费观看| 中文字幕亚洲色图| 97国产suv精品一区二区62| 亚洲福利视频免费观看| 日本精品中文字幕| 黑人精品xxx一区|