<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        .NET工廠方法模式講解

        來源:懂視網 責編:小采 時間:2020-11-27 22:36:19
        文檔

        .NET工廠方法模式講解

        .NET工廠方法模式講解:工廠方法模式介紹: 工廠方法(Factory Method)模式的意義是定義一個創建產品對象的工廠接口,將實際創建工作推遲到子類當中。核心工廠類不再負責產品的創建,這樣核心類成為一個抽象工廠角色,僅負責具體工廠子類必須實現的接口,這樣進一步抽象化的好處是使
        推薦度:
        導讀.NET工廠方法模式講解:工廠方法模式介紹: 工廠方法(Factory Method)模式的意義是定義一個創建產品對象的工廠接口,將實際創建工作推遲到子類當中。核心工廠類不再負責產品的創建,這樣核心類成為一個抽象工廠角色,僅負責具體工廠子類必須實現的接口,這樣進一步抽象化的好處是使

        工廠方法模式介紹:

        工廠方法(Factory Method)模式的意義是定義一個創建產品對象的工廠接口,將實際創建工作推遲到子類當中。核心工廠類不再負責產品的創建,這樣核心類成為一個抽象工廠角色,僅負責具體工廠子類必須實現的接口,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品。

        工廠方法模式結構圖:

        角色分類:

        抽象工廠角色:是工廠方法模式的核心,與應用程序無關。任何在模式中創建的對象的工廠類必須實現這個接口。
        具體工廠角色:這是實現抽象工廠接口的具體工廠類,包含與應用程序密切相關的邏輯,并且受到應用程序調用以創建產品對象
        抽象產品角色:工廠方法模式所創建的對象的超類型,也就是產品對象的共同父類或共同擁有的接口。在上圖中,這個角色是Light。
        具體產品角色:這個角色實現了抽象產品角色所定義的接口。某具體產品有專門的具體工廠創建,它們之間往往一一對應。

        引入實際例子:

        在上一篇博文簡單工廠模式中,使用簡單工廠模式進行了以下實現:如果有一個住戶管理系統,里面的住戶類型是可變的,每一種租戶類型的租金計算公式都存在差異例如:A類型的住戶租金額=天數*單價+績效*0.005;B類型的住戶租金額=月份*(每月價格+performance*0.001)這里我們雖然實現了客戶的需求,但是如果客戶后期需要增加了C類型商店和D類型商店,而它們的算法要求又不一樣,這個時候我們就需要進行C,D類型商店的創建,并繼承Ishop接口,實現里面的方法,同時還得繼續修改工廠類在switc中增加case進行捕捉創建相應的商店對象,一旦出現這樣的情況,是不利于程序的擴展性和項目后期的維護性的。

        1.分析:商店有共同的行為特征,都要進行店鋪租金計算行為,我們抽象了Ishop ,里面有待實現的計算商店租金方法行為。

        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;
        
        namespace FactoryEntiy
        {
         public interface Ishop
         {
         double Getrent(int days, double dayprice, double performance);
         }
        }
        
        

        2.我們實現Isho接口里面的方法,創建A,B類型店鋪。

        using FactoryEntiy;
        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;
        
        namespace ProductEnity
        {
         /// <summary>
         /// 繼承商店接口,實現里面的行為方法,即算法
         /// </summary>
         public class Ashop:Ishop
         {
         /// <summary>
         /// /// A類型商店租金額,天數*單價+績效*0.005
         /// </summary>
         /// <param name="days">天數</param>
         /// <param name="dayprice">每天單價</param>
         /// <param name="performance">日平均績效</param>
         /// <returns></returns>
         public double Getrent(int days, double dayprice, double performance)
         {
         Console.WriteLine("A商店的租金算法");
         return days * dayprice + performance * 0.01;
         }
         }
        }
        
        
        using FactoryEntiy;
        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;
        
        namespace ProductEnity
        {
         /// <summary>
         /// 繼承商店接口,實現里面的行為方法,即算法
         /// </summary>
         public class Bshop:Ishop
         {
         /// <summary>
         /// B類型商店的租金=月份*(每月價格+performance*0.001)
         /// </summary>
         /// <param name="month">月數</param>
         /// <param name="monthprice">月單價</param>
         /// <param name="performance">月平均績效</param>
         /// <returns></returns>
         public double Getrent(int month, double monthprice, double performance)
         {
         Console.WriteLine("B商店的租金算法");
         return month * (monthprice + performance * 0.001);
         }
         }
        }
        
        

        3.現在考慮在什么情況下創建商店的實體,對不同的商店進行租金計算,并且方便以后的增加和修改。于是我們創建IFactroy接口,里面有待實現的創建商店對象的方法。

        using FactoryEntiy;
        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;
        
        namespace FactoryMethod
        {
         /// <summary>
         /// 工廠類,創建商店類型實體
         /// </summary>
         public interface IFactory
         {
         Ishop CreateShop();
         }
        }
        
        

        4.現在我們就可以繼承自IFactory,實現里面創建對應的商店對象了。

        using FactoryEntiy;
        using FactoryMethod;
        using ProductEnity;
        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;
        
        namespace ProductEnity
        {
         /// <summary>
         /// 繼承工廠類,創建A類型商店實體
         /// </summary>
         public class CreateBshop : IFactory
         {
         public Ishop CreateShop()
         {
         return new Ashop();
         }
         }
        }
        
        
        using FactoryEntiy;
        using FactoryMethod;
        using ProductEnity;
        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;
        
        namespace ProductEnity
        {
         /// <summary>
         /// 繼承工廠類,創建B類型商店實體
         /// </summary>
         public class CreateAshop : IFactory
         {
         public Ishop CreateShop()
         {
         return new Bshop();
         }
         }
        }
        
        

        5.之后根據當前的商店類型進行判斷,該類型的商店應該進行哪一種算法:

        using FactoryEntiy;
        using System;
        using System.Collections.Generic;
        using System.Configuration;
        using System.Linq;
        using System.Reflection;
        using System.Text;
        
        namespace FactoryMethod.App
        {
         class Program
         {
         static void Main(string[] args)
         {
         string shopname = ConfigurationManager.AppSettings["CreateShopClassName"];
         //shopname為創建商店類名稱,此處=CreateAshop
         IFactory af = (IFactory)Assembly.Load("ProductEnity").CreateInstance("ProductEnity." + shopname);
         //第一個ProductEnity是dll的名稱,第二個ProductEnity是項目的命名空間。
         Ishop As = af.CreateShop(); double total = As.Getrent(30, 300, 2000); //30 天/100元 日平均績效為2000 
         Console.WriteLine("該A類型商店的租金為:" + total); 
         
         Console.WriteLine("=============");
         IFactory bf = (IFactory)Assembly.Load("ProductEnity").CreateInstance("ProductEnity." + "CreateBshop");
         //CreateBshop可以保存為配置或者存在數據庫中,
         //注意該保存字符串應該與項目中創建的類名一樣,
         //否則反射的方式會找不到該項目下的類。
         Ishop Bs = bf.CreateShop(); total = Bs.Getrent(30, 300, 2000); //30 天/100元 日平均績效為2000
         Console.WriteLine("該A類型商店的租金為:" + total);
         }
         }
        }
        
        

        這里我們使用反射的方式創建對象,替換了之前的工廠類通過switch創建對象的方式,有利于后面的新類型商店增加和算法修改增加和維護以后在項目需求在有變革,我們只需要重新在項目中增加C,D類型商店,繼承Ishop實現里面的方法,同時,添加繼承IFactroy接口,創建對應的商店對象編譯該項目的ProductEnity.dll,以后再進行計算該C,D類型的商店算法就可以通過反射的方式進行計算,不需要修改原來的工程類代碼。

        整個項目的結構圖如下:

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        .NET工廠方法模式講解

        .NET工廠方法模式講解:工廠方法模式介紹: 工廠方法(Factory Method)模式的意義是定義一個創建產品對象的工廠接口,將實際創建工作推遲到子類當中。核心工廠類不再負責產品的創建,這樣核心類成為一個抽象工廠角色,僅負責具體工廠子類必須實現的接口,這樣進一步抽象化的好處是使
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲国产成人资源在线软件| 亚洲AV午夜成人影院老师机影院| 亚洲欧洲自拍拍偷午夜色| 视频免费在线观看| 国产成人亚洲精品影院| 又长又大又粗又硬3p免费视频| 国产男女猛烈无遮档免费视频网站| 亚洲人成网网址在线看| 好爽又高潮了毛片免费下载| 亚洲人成网站在线播放2019| 四色在线精品免费观看| 亚洲成在人线在线播放无码| 日韩在线看片免费人成视频播放| 亚洲精品自偷自拍无码| 免费国产在线观看老王影院| 菠萝菠萝蜜在线免费视频| 亚洲人成色77777在线观看大| 亚洲国产免费综合| 亚洲V无码一区二区三区四区观看| 午夜免费福利小电影| 亚洲毛片无码专区亚洲乱| 手机在线免费视频| 黄页网站在线免费观看| 国产亚洲人成A在线V网站| 日本人成在线视频免费播放| 亚洲美免无码中文字幕在线| 久久不见久久见中文字幕免费| 最新亚洲人成网站在线观看| 国产成人精品日本亚洲专区61 | 亚洲国产美女精品久久| 好先生在线观看免费播放| 在线观看亚洲网站| 亚洲综合伊人久久大杳蕉| 亚洲精品在线免费看| 亚洲av无码成人影院一区| 久久精品国产69国产精品亚洲| 四虎1515hh永久久免费| 国产亚洲高清在线精品不卡| 亚洲精品无码专区在线在线播放| 国产精品色拉拉免费看| 国产亚洲视频在线播放大全|