国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Simple Factory Pattern 簡單工廠模式簡介與 C# 示例【創(chuàng)建型】【設(shè)計模式來了】

這篇具有很好參考價值的文章主要介紹了Simple Factory Pattern 簡單工廠模式簡介與 C# 示例【創(chuàng)建型】【設(shè)計模式來了】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?〇、簡介

1、什么是簡單工廠模式?

一句話解釋:

??客戶類和工廠類嚴格分工,客戶類只需知道怎么用,處理邏輯交給工廠類。

簡單工廠模式(Simple Factory Pattern)是日常開發(fā)中常用的設(shè)計模式。其是一種簡單的創(chuàng)建型模式,它通過一個工廠類來創(chuàng)建對象,客戶端只需要知道如何使用工廠類,而不需要知道對象的實現(xiàn)細節(jié)。工廠類負責創(chuàng)建對象的整個生命周期,并且負責處理與具體實現(xiàn)有關(guān)的邏輯。

這種將變化邏輯和客戶端分離的方式,就是面向?qū)ο笾械摹胺庋b”特性了。

?一個比喻:(食堂與學生)

??比如一個食堂中午有各種面食,學生也就是客戶端,關(guān)心的是菜單想吃哪個就給直接說,不關(guān)心這份燜面或者燴面怎么做的,后廚就相當于工廠類,把控著制作的步驟。

2、優(yōu)缺點和使用場景

  • 優(yōu)點:簡單工廠模式可以使客戶端代碼變得簡潔,同時隱藏對象的實現(xiàn)細節(jié)。
  • 缺點:當需要增加新的運算類時,需要修改工廠類的代碼,這違反了開閉原則。此外,工廠類包含了一組相關(guān)對象的創(chuàng)建邏輯,這使得工廠類變得復雜,難以維護。

?使用場景舉例:

  • 客戶端如果對于如何創(chuàng)建對象的邏輯不關(guān)心,且知道工廠類的入?yún)r,可以考慮使用簡單工廠模式。
  • 當工廠類負責創(chuàng)建的對象比較少時可以考慮使用簡單工廠模式,因為比較多的話 case 太多維護起來較麻煩。

二、簡單工廠模式的簡單實現(xiàn)與比較

?如下代碼,是一個畫形狀的示例:

// 形狀接口,畫動作的方法
public interface IShape
{
    void Draw();
}
public class Circle : IShape
{
    public void Draw()
    {
        Console.WriteLine("畫圓:〇");
    }
}
public class Rectangle : IShape
{
    public void Draw()
    {
        Console.WriteLine("畫方:口");
    }
}
public class ShapeFactory // 簡單工廠實現(xiàn)
{
    public static IShape CreateShape(string shapeType)
    {
        switch (shapeType) // 當需要擴展時,就需要修改這里的 case 也是本模式的缺點所在
        {
            case "圓":
                return new Circle();
            case "方":
                return new Rectangle();
            default:
                throw new ArgumentException("輸入形狀不支持!");
        }
    }
}

測試代碼:?

static void Main(string[] args)
{
    // 簡單工廠模式寫法
    IShape circle = ShapeFactory.CreateShape("圓"); // 把對象的創(chuàng)建交給工廠類
    circle.Draw();
    IShape rectangle = ShapeFactory.CreateShape("方");
    rectangle.Draw();
    // 不用簡單工廠模式的寫法
    Circle circle = new Circle(); // 單個類實例化,把創(chuàng)建對象的工作放在了客戶端
    circle.Draw();
    Rectangle rectangle = new Rectangle();
    rectangle.Draw();
}

結(jié)果是相同的:

???Simple Factory Pattern 簡單工廠模式簡介與 C# 示例【創(chuàng)建型】【設(shè)計模式來了】

三、在 .NET 框架中的實際應用

?.NET 中 System.Text.Encoding 類就實現(xiàn)了簡單工廠模式,該類中的 GetEncoding(int codepage) 就是工廠方法,具體的代碼可以通過 ILSpy 反編譯工具進行查看,下面就是該方法中的代碼:

// System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e
// System.Text.Encoding
using System.Globalization;

public static Encoding GetEncoding(int codepage)
{
    Encoding encoding = FilterDisallowedEncodings(EncodingProvider.GetEncodingFromProvider(codepage));
    if (encoding != null)
    {
        return encoding;
    }
    switch (codepage)
    {
        case 0:
            return Default;
        case 1200:
            return Unicode;
        case 1201:
            return BigEndianUnicode;
        case 12000:
            return UTF32;
        case 12001:
            return BigEndianUTF32;
        case 65001:
            return UTF8;
        case 20127:
            return ASCII;
        case 28591:
            return Latin1;
        case 1:
        case 2:
        case 3:
        case 42:
            throw new ArgumentException(SR.Format(SR.Argument_CodepageNotSupported, codepage), "codepage");
        case 65000:
            {
                if (LocalAppContextSwitches.EnableUnsafeUTF7Encoding)
                {
                    return UTF7;
                }
                string p = string.Format(CultureInfo.InvariantCulture, "https://aka.ms/dotnet-warnings/{0}", "SYSLIB0001");
                string message = SR.Format(SR.Encoding_UTF7_Disabled, p);
                throw new NotSupportedException(message);
            }
        default:
            if (codepage < 0 || codepage > 65535)
            {
                throw new ArgumentOutOfRangeException("codepage", SR.Format(SR.ArgumentOutOfRange_Range, 0, 65535));
            }
            throw new NotSupportedException(SR.Format(SR.NotSupported_NoCodepageData, codepage));
    }
}

public abstract class Encoding : ICloneable
{
    // 。。。
}

?由源碼可知,GetEncoding(int) 方法中,例舉了全部可用的編碼方式,客戶端這可以通過編碼 codepage 查詢目標編碼類型。

參考:https://www.cnblogs.com/zhili/p/SimpleFactory.html

四、簡單工廠、工廠方法和抽象工廠模式的關(guān)系

三者都屬于創(chuàng)建型設(shè)計模式,都關(guān)注對象的創(chuàng)建,但在實現(xiàn)方式和應用場景上有一些區(qū)別。

相同點:

  • 都是創(chuàng)建對象的設(shè)計模式,將對象的實例化過程封裝起來。
  • 通過使用這些模式,可以提供靈活性和可維護性,降低了代碼的耦合度。

區(qū)別:

  • 簡單工廠(Simple Factory):由一個工廠類根據(jù)傳入的參數(shù)來決定創(chuàng)建哪種產(chǎn)品的實例??蛻舳酥恍枰c工廠類交互,不需要直接實例化具體產(chǎn)品。適用于創(chuàng)建單一類型的產(chǎn)品。優(yōu)點是簡單易懂,適用于只有少量產(chǎn)品的情況,但缺點是擴展性較差,添加新產(chǎn)品時需要修改工廠類。
  • 工廠方法(Factory Method):定義一個創(chuàng)建產(chǎn)品的接口,由子類來決定具體實例化哪個產(chǎn)品??蛻舳送ㄟ^調(diào)用工廠方法來獲取產(chǎn)品實例。適用于創(chuàng)建一組相關(guān)或相似的產(chǎn)品。它通過使用繼承或?qū)崿F(xiàn)接口的方式來實現(xiàn)產(chǎn)品的創(chuàng)建,提供了更好的擴展性和靈活性,但也增加了代碼的復雜度。
  • 抽象工廠(Abstract Factory):提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定其具體類??蛻舳送ㄟ^調(diào)用抽象工廠接口來創(chuàng)建一組相關(guān)的產(chǎn)品。適用于創(chuàng)建一系列相關(guān)的產(chǎn)品族。它在工廠模式的基礎(chǔ)上進一步抽象,將一系列相關(guān)的產(chǎn)品組成一個產(chǎn)品族,能夠方便地創(chuàng)建一組相關(guān)對象。同樣也增加了系統(tǒng)的復雜度。

簡單工廠模式適用于只有少量產(chǎn)品且不經(jīng)常變動的情況,而工廠方法模式和抽象工廠模式適用于需要創(chuàng)建多個相關(guān)或相似產(chǎn)品的情況。文章來源地址http://www.zghlxwxcb.cn/news/detail-460078.html

到了這里,關(guān)于Simple Factory Pattern 簡單工廠模式簡介與 C# 示例【創(chuàng)建型】【設(shè)計模式來了】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • Java設(shè)計模式-簡單工廠(Simple Factory)模式

    簡單工廠(Simple Factory)模式,又稱為靜態(tài)工廠方法(Static Factory Method)模式。 由一個工廠類來創(chuàng)建具體產(chǎn)品,即創(chuàng)建具體類的實例。 簡單工廠模式從概念上涉及三個角色: 抽象產(chǎn)品角色:是具體類的父類,規(guī)定了所有類的共同行為。一般是抽象類、或者接口。 具體產(chǎn)品角

    2024年02月16日
    瀏覽(25)
  • 設(shè)計模式-抽象工廠模式(Abstract Factory Pattern)結(jié)構(gòu)|原理|優(yōu)缺點|場景|示例

    ?目錄 ????????設(shè)計模式(分類)????????設(shè)計模式(六大原則)? ? ? ? 創(chuàng)建型 ????????工廠方法?????????抽象工廠模式????????單例模式????????建造者模式????????原型模式 ? ? ?結(jié)構(gòu)型 ????????適配器模式????????裝飾器模式??????

    2024年04月22日
    瀏覽(24)
  • 設(shè)計模式--工廠模式(Factory Pattern)

    設(shè)計模式--工廠模式(Factory Pattern)

    工廠模式(Factory Pattern)是一種創(chuàng)建型設(shè)計模式,它提供了一種創(chuàng)建對象的接口,但是將對象的實例化過程推遲到子類中。工廠模式允許通過調(diào)用一個共同的接口方法來創(chuàng)建不同類型的對象,而無需暴露對象的實例化邏輯。 工廠模式的主要目標是解耦對象的創(chuàng)建和使用,以及

    2024年02月10日
    瀏覽(31)
  • 抽象工廠模式(Abstract Factory Pattern)

    抽象工廠模式(Abstract Factory Pattern)

    回顧工廠方法設(shè)計模式的不足:具體產(chǎn)品增加時,系統(tǒng)中類的個數(shù)將成對增加,在一定程度上增加了系統(tǒng)的復雜度 產(chǎn)品等級結(jié)構(gòu):產(chǎn)品等級結(jié)構(gòu)即產(chǎn)品的繼承結(jié)構(gòu),即抽象產(chǎn)品與具體產(chǎn)品 產(chǎn)品族:在抽象工廠模式中,產(chǎn)品族是指由同一個工廠生產(chǎn)的,位于不同產(chǎn)品等級結(jié)構(gòu)

    2024年02月02日
    瀏覽(26)
  • 抽象工廠模式-Abstract Factory Pattern

    抽象工廠模式-Abstract Factory Pattern

    原文地址:https://jaune162.blog/design-pattern/abstract-factory-pattern/ 首先我們由一個實際問題來引出抽象工廠模式。 考慮這樣一個場景,系統(tǒng)中需要向OSS上傳文件,以及通過OSS下載文件。而在系統(tǒng)中有不同的業(yè)務在使用這兩個功能。如下圖: 偽代碼如下

    2024年02月20日
    瀏覽(20)
  • 工廠方法模式【Factory Method Pattern】

    工廠方法模式【Factory Method Pattern】

    實例化對象,用工廠方法代替new操作(重點) 工廠模式包括工廠方法模式和抽象工廠模式 抽象工廠模式是工廠方法模式的擴展 有一組類似的 對象需要創(chuàng)建 在編碼時 不能預見需要創(chuàng)建哪種類的實例 系統(tǒng)需要考慮 擴展性 ,不應依賴于產(chǎn)品類實例如果被創(chuàng)建、組合和表達的細節(jié)

    2024年02月12日
    瀏覽(21)
  • 設(shè)計模式——抽象工廠模式(Abstract Factory Pattern)

    設(shè)計模式——抽象工廠模式(Abstract Factory Pattern)

    概述 ?????? 抽象工廠模式的基本思想是將一些相關(guān)的產(chǎn)品組成一個“產(chǎn)品族”,由同一個工廠統(tǒng)一生產(chǎn)。在工廠方法模式中具體工廠負責生產(chǎn)具體的產(chǎn)品,每一個具體工廠對應一種具體產(chǎn)品,工廠方法具有唯一性,一般情況下,一個具體工廠中只有一個或者一組重載的工

    2024年02月03日
    瀏覽(26)
  • 【設(shè)計模式】工廠方法模式 ( 簡介 | 適用場景 | 優(yōu)缺點 | 代碼示例 )

    【設(shè)計模式】工廠方法模式 ( 簡介 | 適用場景 | 優(yōu)缺點 | 代碼示例 )_工廠方法模式的優(yōu)缺點_韓曙亮的博客-CSDN博客

    2024年02月16日
    瀏覽(19)
  • 設(shè)計模式01———簡單工廠模式 c#

    設(shè)計模式01———簡單工廠模式 c#

    首先我們打開一個項目 在這個初始界面我們需要做一些準備工作 建基礎(chǔ)通用包 創(chuàng)建一個Plane 重置后 縮放100倍 加一個顏色 任務:使用【簡單工廠模式】生成四種不同怪物 【按不同路徑移動】 首先資源商店下載四個怪物模型 接下來我們選取四個怪物作為預制體并分別起名為

    2024年02月07日
    瀏覽(20)
  • C#設(shè)計模式教程(1):簡單工廠模式

    在C#中,工廠模式可以分為三種主要類型:簡單工廠模式、工廠方法模式和抽象工廠模式。 簡單工廠模式(Simple Factory Pattern): 簡單工廠模式并不屬于23種經(jīng)典設(shè)計模式之一,但它是工廠模式的一種簡單形式。 在簡單工廠模式中,有一個工廠類負責根據(jù)傳入的參數(shù)決定創(chuàng)建

    2024年01月22日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包