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

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

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

      說說設計模式~工廠方法模式(Factory Method)

      返回目錄

      簡單工廠的講解中,出現了很多問題,我們對象統一行為抽象出一個接口(或者抽象類)之后,再根據你傳入的類型進行創建實例,這只適合于你有固定行為的場合,當你要實現接口的類型處于不定數時,則不適合使用簡單工廠模式,而應該用工廠方法了。

      適用場合:

      子類有統一的操作行為

      子類的數量不固定,隨時可能有新的功能子類出現

      工廠方法優勢:

      子類與子類是并列的,關系不精密,程序耦合度比較大

      完全符合OCP原則,對代碼的修改關閉,對代碼的擴展開放

      創建具體對象方法靈活,可以使用反射或者第三方IOC容器

      工廠方法模式代碼片斷,主要從簡單工廠中修改過來的,下面是結果圖

      1 統一操作行為,主要將統一接口抽象出來,讓具體子類去實現它

      1         /// <summary>
      2         /// 工廠方法的規定操作行為
      3         /// </summary>
      4         public interface ICreate
      5         {
      6             void Create();
      7         }

      如果它的一部分功能對于子類是公用的,相同的,那我們需要將ICreate設計成抽象類abstract class ,代碼可以是這樣

       1        public abstract class CreateBase
       2         {
       3             /// <summary>
       4             /// 每個子類都公用的屬性或者方法
       5             /// </summary>
       6             protected string CreateName
       7             {
       8                 get
       9                 {
      10                     return "一個工廠方法模式";
      11                 }
      12             }
      13             /// <summary>
      14             /// 子類必須去實現的抽象方法行為
      15             /// </summary>
      16             abstract void Create();
      17         }

      而一個建立抽象行為的工廠,它可以被其它具體行為工廠繼承,它提供一個方法,叫子類工廠去實現它,并返回子類對象本身。同樣,根據業務需求,可以由抽象類實現

      1         /// <summary>
      2         /// 抽象工廠規定行為
      3         /// </summary>
      4         public interface CreateFactory
      5         {
      6             ICreate CreateObject();
      7         }

      對于具體對象而言,它們要做的就是去實現抽象的行為,以下是一個人物類,它去實現Create方法。

       1         /// <summary>
       2         /// 具體對象實現
       3         /// </summary>
       4         public class People : ICreate
       5         {
       6 
       7             #region ICreate 成員
       8 
       9             public void Create()
      10             {
      11                 Console.WriteLine("創建人類");
      12             }
      13 
      14             #endregion
      15         }

      而對于具體工廠來說,主要作用是去創建一個具體對象的實例,代碼如下:

       1         /// <summary>
       2         /// 具體工廠進行生產對象
       3         /// </summary>
       4         public class PeopleFactory : CreateFactory
       5         {
       6             #region CreateFactory 成員
       7 
       8             public ICreate CreateObject()
       9             {
      10                 return new People();
      11             }
      12 
      13             #endregion
      14         }

      以程序調用時,我們需要先去創建一個工廠,然后再使用工廠中的方法,來完成我們的操作

      1             FactoryMethod.CreateFactory createFactory = new FactoryMethod.PeopleFactory();
      2             FactoryMethod.ICreate iCreate = createFactory.CreateObject();
      3             iCreate.Create();

      而這時,我們看到,代碼有些不完美,那就是在創建具體工廠時還是出現了new,即還是存在著代碼間的依賴,如何解除這樣依賴使代碼更加松耦合呢,這時,我們可以使用反射或者IOC

      容器來解決這個問題:

      1             string strfactoryName = ConfigurationManager.AppSettings["factoryName"];
      2             FactoryMethod.CreateFactory factory = (FactoryMethod.CreateFactory)Assembly.Load("FactoryMethod").CreateInstance("FactoryMethod." + strfactoryName);
      3             FactoryMethod.ICreate create = factory.CreateObject();
      4             create.Create();

       

      我們從代碼中可以看到,具體工廠的創建已經被約束到了配置文件中,這是我們可以接受的,呵呵。

      事實上,微軟自己在它的組件中大大使用了工廠方法模式,如MVC中的Controller的創建方法,也是這個道理。

      返回目錄

       

       

      posted @ 2012-06-25 17:01  張占嶺  閱讀(2403)  評論(5)    收藏  舉報
      主站蜘蛛池模板: 国产精品免费中文字幕| 亚洲色大成网站WWW永久麻豆| 网友偷拍视频一区二区三区| 色噜噜在线视频免费观看| AV秘 无码一区二| 最近中文字幕免费手机版| 欧美乱大交aaaa片if| 综合偷自拍亚洲乱中文字幕| 亚洲精品韩国一区二区| 西西444www高清大胆| 丁香五月婷激情综合第九色| 精品三级在线| 18禁无遮挡啪啪无码网站破解版| 日日摸夜夜添夜夜添国产三级| 国产AV福利第一精品| 久久久久免费看黄a片app| 国产AV无码专区亚洲AV漫画| 72种姿势欧美久久久久大黄蕉| 99精品国产一区二区电影| 少妇人妻精品一区二区| 欧美刺激性大交| 重庆市| 无码AV无码天堂资源网影音先锋| 亚洲AV无码破坏版在线观看| 在线观看热码亚洲av每日更新| 久久99热成人精品国产| 久久综合亚洲鲁鲁九月天| 亚洲情A成黄在线观看动漫尤物| 四川丰满少妇无套内谢| 精品亚洲国产成人av| 成人亚洲性情网站www在线观看| 国产热A欧美热A在线视频| 日韩不卡一区二区三区四区| 亚洲中文字幕无码专区| 久久精品国产再热青青青| 国产中年熟女高潮大集合| 久久久久国产精品人妻电影| 国产精品日日摸夜夜添夜夜添无码| 久久a级片| 九色国产精品一区二区久久| 亚洲情A成黄在线观看动漫尤物 |