亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

深入c#工廠模式的詳解

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

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

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

namespace Example2
{
    /// <summary>
    /// 抽象的工廠類型特性描述
    /// </summary>
    public interface IFactory
    {
        IProduct Create();  //  每個(gè)工廠所需要具有的工廠方法——?jiǎng)?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的同時(shí),與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、工廠方法模式注重的是整體對(duì)象的創(chuàng)建方法
2、工廠方法的意圖非常明確,它把類的實(shí)例化過程延遲到子類,將new()的工作交給工廠 完成。
同時(shí),增加一個(gè)抽象的工廠定義,解決一系列具有統(tǒng)一通用工廠方法的實(shí)體工廠問題。 在.NET 平臺(tái)中,我們可以借助配置、泛型和委托的方法在實(shí)現(xiàn)經(jīng)典模式目的的同時(shí),獲得工廠類型與客戶程序間更加松散的構(gòu)造過程。

相關(guān)文章

  • C#文件操作的簡(jiǎn)單實(shí)例

    C#文件操作的簡(jiǎn)單實(shí)例

    這篇文章主要介紹了C#文件操作的簡(jiǎn)單實(shí)例,需要的朋友可以參考下
    2014-02-02
  • C# 實(shí)現(xiàn)特殊字符快速轉(zhuǎn)碼

    C# 實(shí)現(xiàn)特殊字符快速轉(zhuǎn)碼

    這篇文章主要介紹了C# 實(shí)現(xiàn)特殊字符快速轉(zhuǎn)碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • C#執(zhí)行js動(dòng)態(tài)編譯的方法

    C#執(zhí)行js動(dòng)態(tài)編譯的方法

    這篇文章主要介紹了C#執(zhí)行js動(dòng)態(tài)編譯的方法,是涉及動(dòng)態(tài)編譯腳本非常實(shí)用的技巧,需要的朋友可以參考下
    2015-01-01
  • 帶你復(fù)習(xí)c# 托管和非托管資源

    帶你復(fù)習(xí)c# 托管和非托管資源

    這篇文章主要介紹了c# 托管和非托管資源的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 基于WPF編寫一個(gè)串口轉(zhuǎn)UDP工具

    基于WPF編寫一個(gè)串口轉(zhuǎn)UDP工具

    串口是設(shè)備和上位機(jī)通信的常用接口,UDP則是網(wǎng)絡(luò)通信常用的通信協(xié)議,串口和UDP之間的相互轉(zhuǎn)換是非常有意義的。本文就利用WPF編寫一個(gè)串口轉(zhuǎn)UDP工具,需要的可以參考一下
    2023-04-04
  • c#之事件用法

    c#之事件用法

    這篇文章介紹了c#中事件的用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#中DataBindings用法實(shí)例分析

    C#中DataBindings用法實(shí)例分析

    這篇文章主要介紹了C#中DataBindings用法,結(jié)合實(shí)例形式詳細(xì)分析了DataBindings綁定數(shù)據(jù)源及刷新數(shù)據(jù)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • C#并發(fā)編程之Task類詳解

    C#并發(fā)編程之Task類詳解

    Task是建立在線程池之上的一種多線程技術(shù),它的出現(xiàn)使Thread成為歷史。其使用方法非常簡(jiǎn)單,本文就來通過幾個(gè)示例為大家講講它的具體使用吧
    2023-03-03
  • C# 創(chuàng)建報(bào)表過程詳解

    C# 創(chuàng)建報(bào)表過程詳解

    本文給大家介紹的是使用vs2012 c#創(chuàng)建報(bào)表的全部過程的記錄,十分的詳細(xì),有需要的小伙伴可以參考下。
    2015-06-06
  • C#中如何使用 XmlReader 讀取XML文件

    C#中如何使用 XmlReader 讀取XML文件

    本文介紹了C#中使用XmlReader,只讀、向前、循環(huán)讀取XML節(jié)點(diǎn)的方法,并為我們列出、XmlReader類的方法、屬性、枚舉等成員,希望對(duì)大家學(xué)習(xí)有所幫助。
    2016-05-05

最新評(píng)論