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

深入了解c# 設(shè)計(jì)模式之簡單工廠模式

 更新時(shí)間:2020年06月23日 16:20:12   作者:艾心❤  
這篇文章主要介紹了c# 設(shè)計(jì)模式之簡單工廠模式的的相關(guān)資料,文中代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

簡單工廠模式,需要說明的是,它并不屬于GOF 23種設(shè)計(jì)模式中的一種。但它卻豐富了工廠模式家族,因?yàn)槠浜唵蔚乃枷牒褪褂梅绞?,也有很廣泛的使用

簡單工廠模式又稱為靜態(tài)工廠模式,它用來確定創(chuàng)建哪一種對象的實(shí)例。這種模式應(yīng)該說是最簡單最實(shí)用的工廠模式了,它將外界創(chuàng)建對象的邏輯收集起來,做到了對外界隔離對象的創(chuàng)建邏輯的目的,使外面完全的成為了對象實(shí)例的使用者,明確了職責(zé)。

不過這種模式也有著非常明顯是的缺點(diǎn),工廠類中集中了所有對象實(shí)例的創(chuàng)建邏輯,造成了功能的高內(nèi)聚;另外在擴(kuò)展方面,如果需要添加新的類,就需要改變工廠類。隨著系統(tǒng)功能的增多,工廠類也會(huì)變得很臃腫。

使用注意

  • 盡量不要用于創(chuàng)建太多的對象,因?yàn)檫@樣會(huì)把業(yè)務(wù)邏輯變得復(fù)雜,也會(huì)讓系統(tǒng)耦合度變高,很容易造成全局性的影響
  • 客戶端只關(guān)心獲取對象,而不關(guān)心對象的創(chuàng)建細(xì)節(jié)的時(shí)候

另外簡單工廠模式與策略者模式在結(jié)構(gòu)上也非常的相似,在某些場景兩者幾乎可以互換。但是需要強(qiáng)調(diào)的是,簡單工廠模式處理的是對象的獲取,策略者模式處理的是算法及其行為的抽象。

該模式中包含的角色及其職責(zé)

  • 工廠(Factory)角色 :簡單工廠模式的核心,它負(fù)責(zé)實(shí)現(xiàn)創(chuàng)建所有實(shí)例的內(nèi)部邏輯。工廠類可以被外界直接調(diào)用,創(chuàng)建所需的產(chǎn)品對象。
  • 抽象產(chǎn)品(Product)角色 :簡單工廠模式所創(chuàng)建的所有對象的父類,它負(fù)責(zé)描述所有實(shí)例所共有的公共接口。
  • 具體產(chǎn)品(Concrete Product)角色:是簡單工廠模式的創(chuàng)建目標(biāo),所有創(chuàng)建的對象都是充當(dāng)這個(gè)角色的某個(gè)具體類的實(shí)例。

以下為簡單工廠的UML類圖

下面將展示一個(gè)簡單的計(jì)算器列子,使用了抽象類,是因?yàn)槌橄箢惐冉涌诳梢愿玫乇磉_(dá)實(shí)例對象的內(nèi)容

先來看一下這個(gè)實(shí)例的類圖,Calulator為計(jì)算器加減乘除的抽象類,目前只提供了一個(gè)方法就是計(jì)算算術(shù)結(jié)果,SimpleFactory類專用于用于生產(chǎn)加減乘除實(shí)例的對象

以下為具體的代碼

public abstract class Calculator
 {
  public abstract int Operate(int a,int b);
 }

 public class Minus: Calculator
 {
  public override int Operate(int a, int b)
  {
   return a- b;
  }
 }

 public class Plus : Calculator
 {
  public override int Operate(int a, int b)
  {
   return a + b;
  }
 }

 public class Multiply : Calculator
 {
  public override int Operate(int a, int b)
  {
   return a * b;
  }
 }

 public class Divide : Calculator
 {
  public override int Operate(int a, int b)
  {
   if(b==0) throw new ArgumentException("除數(shù)不能為0");
   return a / b;
  }
 }

這里是工廠化處理

public class SimpleFactory
 {
  public Calculator GetOperation(string operatorName)
  {
   switch (operatorName)
   {
    case "Minus":
     return new Minus();

    case "Plus":
     return new Plus();

    case "Multiply":
     return new Multiply();

    case "Divide":
     return new Divide();

    default:
     throw new Exception("當(dāng)前未提供此計(jì)算方式");
   }
  }
 }

調(diào)用

class Program
 {
  static void Main(string[] args)
  {
   SimpleFactory simpleFactory = new SimpleFactory();

   Dictionary<string,string> optionsDictionary = new Dictionary<string, string>
   {
    { "A","Plus"},
    { "B","Minus"},
    { "C","Multiply"},
    { "D","Divide"},
   };

   string readOptions = string.Empty;


   do
   {
    foreach (KeyValuePair<string, string> keyValuePair in optionsDictionary)
    {
     Console.WriteLine(keyValuePair.Key+"、"+keyValuePair.Value);
    }

    Console.WriteLine("請輸入A、B、C、D確定計(jì)算方式");
    string option = Console.ReadLine();
    if (!optionsDictionary.ContainsKey(option))
    {
     throw new Exception("當(dāng)前未提供此計(jì)算方式");
    }

    Console.WriteLine("請輸入第一個(gè)數(shù)");
    int a = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine("請輸入第二個(gè)數(shù)");
    int b = Convert.ToInt32(Console.ReadLine());

    Calculator calculator = simpleFactory.GetOperation(optionsDictionary[option]);
    Console.WriteLine("當(dāng)前結(jié)果是:"+calculator.Operate(a, b));

    Console.WriteLine("繼續(xù)請按Y");

    readOptions = Console.ReadLine();

   } while (readOptions == "Y");
  }
 }

下面是輸出結(jié)果

A、Plus
B、Minus
C、Multiply
D、Divide
請輸入A、B、C、D確定計(jì)算方式
A
請輸入第一個(gè)數(shù)
1
請輸入第二個(gè)數(shù)
5
當(dāng)前結(jié)果是:6
繼續(xù)請按Y
Y
A、Plus
B、Minus
C、Multiply
D、Divide
請輸入A、B、C、D確定計(jì)算方式
C
請輸入第一個(gè)數(shù)
9
請輸入第二個(gè)數(shù)
2
當(dāng)前結(jié)果是:18
繼續(xù)請按Y

以上就是深入了解c# 設(shè)計(jì)模式之簡單工廠模式的詳細(xì)內(nèi)容,更多關(guān)于c# 簡單工廠模式的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • c# AcceptEx與完成端口(IOCP)結(jié)合的示例

    c# AcceptEx與完成端口(IOCP)結(jié)合的示例

    這篇文章主要介紹了c# AcceptEx與完成端口(IOCP)結(jié)合的示例,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#多線程編程中的鎖系統(tǒng)(二)

    C#多線程編程中的鎖系統(tǒng)(二)

    這篇文章主要介紹了C#多線程編程中的鎖系統(tǒng)(二),本文講解了volatile、Interlocked、ReaderWriterLockSlim等升級(jí)鎖和原子操作的使用實(shí)例,需要的朋友可以參考下
    2015-04-04
  • C#執(zhí)行外部命令的方法

    C#執(zhí)行外部命令的方法

    這篇文章主要介紹了C#執(zhí)行外部命令的方法,實(shí)例分析了C#調(diào)用CMD.exe程序執(zhí)行外部命令的技巧,需要的朋友可以參考下
    2015-06-06
  • Unity實(shí)現(xiàn)噴漆效果

    Unity實(shí)現(xiàn)噴漆效果

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)噴漆效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 詳解TreeView綁定數(shù)據(jù)庫

    詳解TreeView綁定數(shù)據(jù)庫

    這篇文章主要演示了TreeView如何與數(shù)據(jù)庫進(jìn)行綁定
    2015-07-07
  • C#基于OLEDB獲取Excel文件表結(jié)構(gòu)信息的方法

    C#基于OLEDB獲取Excel文件表結(jié)構(gòu)信息的方法

    這篇文章主要介紹了C#基于OLEDB獲取Excel文件表結(jié)構(gòu)信息的方法,結(jié)合實(shí)例形式分析了OLEDB的調(diào)用及Excel的相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • C#使用csvhelper實(shí)現(xiàn)csv的基本操作

    C#使用csvhelper實(shí)現(xiàn)csv的基本操作

    CsvHelper 是一個(gè)用于讀寫 CSV 文件的.NET庫,極其快速,靈活且易于使用,CsvHelper 建立在.NET Standard 2.0 之上,幾乎可以在任何地方運(yùn)行,本文給大家介紹了C#使用csvhelper實(shí)現(xiàn)csv的基本操作,需要的朋友可以參考下
    2024-07-07
  • C#導(dǎo)出網(wǎng)站功能實(shí)例代碼講解

    C#導(dǎo)出網(wǎng)站功能實(shí)例代碼講解

    這篇文章主要介紹了C#導(dǎo)出網(wǎng)站功能實(shí)例代碼,需要的朋友可以參考下
    2015-10-10
  • Unity Shader實(shí)現(xiàn)3D翻頁效果

    Unity Shader實(shí)現(xiàn)3D翻頁效果

    這篇文章主要為大家詳細(xì)介紹了Unity Shader實(shí)現(xiàn)3D翻頁效果,Plane實(shí)現(xiàn)翻頁效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • c# 進(jìn)程和線程的區(qū)別與聯(lián)系

    c# 進(jìn)程和線程的區(qū)別與聯(lián)系

    這篇文章主要介紹了c# 進(jìn)程和線程的區(qū)別與聯(lián)系,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12

最新評(píng)論

沅江市| 内江市| 凤庆县| 文登市| 依安县| 湾仔区| 湾仔区| 三河市| 平凉市| 肇州县| 章丘市| 德钦县| 灵寿县| 商都县| 江西省| 华蓥市| 广汉市| 修文县| 白朗县| 沧源| 酒泉市| 德令哈市| 大厂| 阳新县| 闽清县| 东安县| 新密市| 商水县| 张家港市| 奈曼旗| 奇台县| 封开县| 伊通| 富民县| 调兵山市| 东乡县| 大足县| 海门市| 桃江县| 喜德县| 阿勒泰市|