首頁 > 軟體

C#實現簡單工廠模式

2022-07-08 18:02:47

情景:有一個怪獸,HP是100,現在勇士有可以使用武器將其打敗,有三種武器,木劍每次打擊20血,鐵劍每次50血,金剛劍每次100血,如果想要使用簡單工廠方式,怎麼設計?

一.啥是簡單工廠?

通過專門定義一個類來負責建立其他類的範例,被建立的範例通常都具有共同的父類別。

結構大概如下圖:

畫出場景的類圖

解釋:

  • 1.Sword是一個基礎類別,通過其中有一個欄位儲存怪物的血量,還有一個虛方法是打擊怪物的方法
  • 2.有三個具體的武器的類,分別對應木劍、鐵劍、金剛劍,實現了各種對怪物打擊的邏輯
  • 3.CreateSwordFactory類,是具體範例化武器的類,通過使用者端的呼叫,可以傳入想要建立的武器。
  • 4.Program就是使用者端

二.具體的程式碼

1.Sword.cs類

namespace SimpleFactory
{
        public class Sword
        {
                protected int monsterLife = 100;
                public virtual void beat()
                {
                        
                }
        }
}

2.WoodSword.cs

namespace SimpleFactory
{
        public class WoodSword : Sword
        {
                public override void beat()
                {
                        while (monsterLife > 0)
                        {
                                base.monsterLife -= 20;
                                Console.WriteLine("The Monster is already alive!");
                        }
                        Console.WriteLine("Excellent!The Monster is dead!"); 
                }
        }
}

3.IronSword.cs

namespace SimpleFactory
{
        public class IronSword:Sword
        {
                public override void beat()
                {
                        while (monsterLife > 0)
                        {
                                base.monsterLife -= 50;
                                Console.WriteLine("The Monster is already alive!");
                        }
                        Console.WriteLine("Excellent!The Monster is dead!"); 
                }
        }
}

4.DiamondSword.cs

namespace SimpleFactory
{
      public class DiamondSword:Sword
        {
              public override void beat()
                {
                        while (monsterLife > 0)
                        {
                                base.monsterLife -= 100;
                                Console.WriteLine("The Monster is already alive!");
                        }
                        Console.WriteLine("Excellent!The Monster is dead!"); 
                }
        }
}

5.CreateSwordFactory.cs

namespace SimpleFactory
{
        public class CreateSwordFactory
        {
                public static Sword CreateSword(string sword)
                {
                        Sword s = null;
                        switch (sword)
                        { 
                                case "WoodSword":
                                          s = new WoodSword();
                                        break;
                                case "IronSword":
                                          s = new IronSword();
                                        break;
                                case "DiamondSword":
                                          s = new DiamondSword();
                                        break;
                                default:
                                        break;
                        }
                        return s;
                }
        }
}

6.Program.cs

namespace SimpleFactory
{
        class Program
        {
                static void Main(string[] args)
                {
                        Sword s = CreateSwordFactory.CreateSword("WoodSword");
                        s.beat();
                        Console.WriteLine("----------------------");
                        s=CreateSwordFactory.CreateSword("IronSword");
                        s.beat();
                        Console.WriteLine("----------------------");
                        s = CreateSwordFactory.CreateSword("DiamondSword");
                        s.beat();
                }
        }
}

三.執行效果和總結

效果:

總結:

簡單工廠模式的優缺點:

優點:如下圖所示,這時候我們新增一個其他的劍,那麼我不需要去修改我紅色區域的東西,僅僅修改CreateSwordFactory.cs這個類就行,然後這個類根據使用者端給出的具體產生什麼劍再去範例化就可以了。不需要了解具體每一個劍是怎麼被建立的。

缺點:以為過多的依賴於工廠類,簡單工廠模式違背了“開放封閉原則”,就是違背了“系統對擴充套件開放,對修改關閉”的原則,因為當我新增加一個劍的時候必須修改工廠類,相應的工廠類就需要重新編譯一遍。

到此這篇關於C#簡單工廠模式的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com