最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入c#工廠模式的詳解

 更新時間:2013年05月22日 15:52:55   作者:  
本篇文章是對c#中的工廠模式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
什么是工廠模式?
類比生活中的概念,當(dāng)我們需要打電話的時候,我們需要一部手機(jī),我們通常會選擇直接去賣手機(jī)的實(shí)體店買。但在程序設(shè)計(jì)中,當(dāng)我們需要調(diào)用一個類(PhoneA或PhoneB)的方法的時候,我們往往還要關(guān)心他是怎么new出來的(見代碼段1)。這就好比我們自己還要去工廠里面告訴他們你要怎么生產(chǎn)出一部我需要的手機(jī)。而我們只關(guān)心他能不能打電話,你怎么做的關(guān)我屁事。所以這就有了工廠模式。工廠模式其實(shí)就是抽象出一個工廠,我需要什么手機(jī),去哪個工廠買就行了。我不必關(guān)心他的制作過程,你只要能生產(chǎn)我要的功能的手機(jī)就行。所以我們需要引入簡單工廠,讓我們不用再關(guān)心手機(jī)怎么生產(chǎn)的,具體代碼的實(shí)現(xiàn)見代碼段2
復(fù)制代碼 代碼如下:

public class Customer
{
    public void CallSomeOne(){
        PhoneA p1 = new PhoneA();
        p1.Call();
    }
}
public class PhoneA
{
    public void Call(){}
}
public class PhoneB
{
    public void Call(){}
}

代碼段1 :通常的調(diào)用類方法的方式
復(fù)制代碼 代碼如下:

using System;
namespace Example1
{
    public interface IProduct { }
    public class PhoneA : IProduct { }
    public class PhoneB : IProduct { }
    public class Factory
    {
        public IProduct Create()
        {
            // 工廠決定到底實(shí)例化哪個子類。
            return new PhonetA ();
        }
    }
}
using System;
namespace Example1
{
    public enum Category
    {
        A,

    }
    public static class ProductFactory
    {
        public static IProduct Create(Category category)
        {
            switch (category)
            {
                case Category.A:
                    return new PhoneA();
                case Category.B:
                    return new PhoneB();
                default:
                    throw new NotSupportedException();
            }
        }
    }
}

代碼段2:簡單工廠模式的實(shí)現(xiàn)
復(fù)制代碼 代碼如下:

[TestMethod]
        public void Test()
        {
            Factory factory = new Factory();
            IProduct phone = factory.Create();   
            Assert.AreEqual<Type>(phone.GetType(), typeof(PhoneA));
        }

代碼段3:對簡單工廠模式的測試
新的問題
其實(shí)剛剛也提到了,我們只要一只能打電話的手機(jī),我就想去實(shí)體店買一下,我才不關(guān)心是哪個工廠生產(chǎn)的呢~而在簡單工廠中,我們還需要關(guān)心是哪個工廠生產(chǎn)的(見代碼段3)。所以我們在代碼里面實(shí)現(xiàn)一個實(shí)體店,這樣我們就不用關(guān)心到底是哪個工廠生產(chǎn)的啦。所以我們需要引入抽象工廠,這樣我們只需要跟實(shí)體店打交道,不要再關(guān)心要去找什么工廠拿手機(jī)了。具體的實(shí)現(xiàn)見代碼段4.我們可以利用配置文件實(shí)現(xiàn)對工廠的選擇,對產(chǎn)品的選擇,因?yàn)楸疚牟幌胍肫渌母拍睿@里就不討論了。
復(fù)制代碼 代碼如下:

namespace Example2
{
    /// <summary>
    /// 抽象的工廠類型特性描述
    /// </summary>
    public interface IFactory
    {
        IProduct Create();  //  每個工廠所需要具有的工廠方法——創(chuàng)建產(chǎn)品
    }
    /// <summary>
    /// 實(shí)體工廠類型
    /// </summary>
    public class FactoryA : IFactory
    {
        public IProduct Create()
        {
            return new PhoneA();
        }
    }
    /// <summary>
    /// 實(shí)體工廠類型
    /// </summary>
    public class FactoryB : IFactory
    {
        public IProduct Create()
        {
            return new PhoneB();
        }
    }
}
using System;
using System.Diagnostics;
namespace Example2
{
    class Client
    {
        public void SomeMethod()
        {
            IFactory factory = new FactoryA();   // 獲得了抽象Factory的同時,與FactoryA產(chǎn)生依賴;
            IProduct Phone = factory.Create(); // 后續(xù)操作僅以來抽象的IFactory和IProduct完成
            // ...
        }
        private IFactory factory;
        public Client(IFactory factory)     // 將IFactory通過Setter方式注入
        {
            if (factory == null) throw new ArgumentNullException("factory");
            this.factory = factory;
        }
        public void AnotherMethod()
        {
            IProduct Phone = factory.Create();
            // ... ...
        }
    }
}

小結(jié)
1、工廠方法模式注重的是整體對象的創(chuàng)建方法
2、工廠方法的意圖非常明確,它把類的實(shí)例化過程延遲到子類,將new()的工作交給工廠 完成。
同時,增加一個抽象的工廠定義,解決一系列具有統(tǒng)一通用工廠方法的實(shí)體工廠問題。 在.NET 平臺中,我們可以借助配置、泛型和委托的方法在實(shí)現(xiàn)經(jīng)典模式目的的同時,獲得工廠類型與客戶程序間更加松散的構(gòu)造過程。

相關(guān)文章

  • C#加載嵌入到資源的非托管dll

    C#加載嵌入到資源的非托管dll

    很多朋友遇到過這樣一個問題需要加載非win32的非托管dll,糾結(jié)該怎么操作呢,下面通過代碼給大家介紹下C#加載嵌入到資源的非托管dll的方法,感興趣的朋友一起看看吧
    2021-05-05
  • C# 嵌入dll 的方法

    C# 嵌入dll 的方法

    這篇文章主要介紹了C# 嵌入dll 的方法,本文圖文并茂給大家及時的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • C#文字識別API場景解析、表格識別提取功能實(shí)現(xiàn)

    C#文字識別API場景解析、表格識別提取功能實(shí)現(xiàn)

    文章介紹了基于深度學(xué)習(xí)算法和自主OCR核心技術(shù)提供的文字識別API,該API能夠適應(yīng)各種復(fù)雜場景,高效、精準(zhǔn)地識別印刷體和手寫體文字,并支持批量識別,文章以身份證識別接口為例,介紹C#文字識別API場景解析、表格識別提取功能,感興趣的朋友一起看看吧
    2024-11-11
  • C#網(wǎng)絡(luò)請求與JSON解析的示例代碼

    C#網(wǎng)絡(luò)請求與JSON解析的示例代碼

    這篇文章主要介紹了C#網(wǎng)絡(luò)請求與JSON解析的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • C#實(shí)現(xiàn)對用戶輸入數(shù)據(jù)進(jìn)行校驗(yàn)的類實(shí)例

    C#實(shí)現(xiàn)對用戶輸入數(shù)據(jù)進(jìn)行校驗(yàn)的類實(shí)例

    這篇文章主要介紹了C#實(shí)現(xiàn)對用戶輸入數(shù)據(jù)進(jìn)行校驗(yàn)的類,實(shí)例分析了C#針對各種用戶輸入數(shù)據(jù)的常用校驗(yàn)技巧,非常具有實(shí)用價值,需要的朋友可以參考下
    2015-03-03
  • C#實(shí)現(xiàn)三元組的使用示例

    C#實(shí)現(xiàn)三元組的使用示例

    本文介紹了C#中的三元組數(shù)據(jù)結(jié)構(gòu),以及如何使用三元組在C#中進(jìn)行一些特定的計(jì)算,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • C#實(shí)現(xiàn)快捷鍵的幾種常用方法匯總

    C#實(shí)現(xiàn)快捷鍵的幾種常用方法匯總

    這篇文章主要介紹了C#實(shí)現(xiàn)快捷鍵的幾種常用方法,非常實(shí)用,需要的朋友可以參考下
    2014-08-08
  • C# WinForms中實(shí)現(xiàn)MD5的加密

    C# WinForms中實(shí)現(xiàn)MD5的加密

    MD5(消息摘要算法第5版)是一種廣泛使用的哈希函數(shù),可以生成一個128位(16字節(jié))的哈希值,通常用于數(shù)據(jù)完整性校驗(yàn)和密碼存儲,在Windows Forms應(yīng)用程序中實(shí)現(xiàn)MD5加密,可以用于用戶密碼的安全存儲和數(shù)據(jù)的完整性驗(yàn)證,本文將詳細(xì)介紹了如何在WinForms中實(shí)現(xiàn)MD5加密
    2024-10-10
  • 在C# WPF下自定義滾動條ScrollViewer樣式的操作

    在C# WPF下自定義滾動條ScrollViewer樣式的操作

    這篇文章主要介紹了在C# WPF下自定義滾動條ScrollViewer樣式的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • http圖片上傳安全性問題 根據(jù)ContentType (MIME) 判斷其實(shí)不準(zhǔn)確、不安全

    http圖片上傳安全性問題 根據(jù)ContentType (MIME) 判斷其實(shí)不準(zhǔn)確、不安全

    圖片上傳常用的類型判斷方法有這么幾種---截取擴(kuò)展名、獲取文件ContentType (MIME) 、讀取byte來判斷(這個什么叫法來著?)。下面由腳本之家小編跟大家分享圖片上傳安全性問題,感興趣的朋友一起看看吧
    2015-09-09

最新評論

屏东县| 定南县| 彭山县| 涪陵区| 鄯善县| 扬州市| 宁晋县| 会理县| 延庆县| 沙雅县| 叙永县| 屯留县| 天峨县| 荆州市| 宜宾县| 乐至县| 建宁县| 元氏县| 崇礼县| 唐河县| 马龙县| 宜丰县| 岗巴县| 来安县| 大姚县| 龙山县| 鸡泽县| 新竹县| 无为县| 保德县| 江华| 上饶县| 汉沽区| 西青区| 泗阳县| 水城县| 张北县| 道孚县| 攀枝花市| 宁津县| 芒康县|