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

C#實(shí)現(xiàn)簡(jiǎn)單工廠模式

 更新時(shí)間:2022年07月08日 17:00:53   作者:奮斗的大橙子  
這篇文章介紹了C#實(shí)現(xiàn)簡(jiǎn)單工廠模式的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

情景:有一個(gè)怪獸,HP是100,現(xiàn)在勇士有可以使用武器將其打敗,有三種武器,木劍每次打擊20血,鐵劍每次50血,金剛劍每次100血,如果想要使用簡(jiǎn)單工廠方式,怎么設(shè)計(jì)?

一.啥是簡(jiǎn)單工廠?

通過(guò)專門定義一個(gè)類來(lái)負(fù)責(zé)創(chuàng)建其他類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類。

結(jié)構(gòu)大概如下圖:

畫出場(chǎng)景的類圖

解釋:

  • 1.Sword是一個(gè)基類,通過(guò)其中有一個(gè)字段保存怪物的血量,還有一個(gè)虛方法是打擊怪物的方法
  • 2.有三個(gè)具體的武器的類,分別對(duì)應(yīng)木劍、鐵劍、金剛劍,實(shí)現(xiàn)了各種對(duì)怪物打擊的邏輯
  • 3.CreateSwordFactory類,是具體實(shí)例化武器的類,通過(guò)客戶端的調(diào)用,可以傳入想要?jiǎng)?chuàng)建的武器。
  • 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();
                }
        }
}

三.運(yùn)行效果和總結(jié)

效果:

總結(jié):

簡(jiǎn)單工廠模式的優(yōu)缺點(diǎn):

優(yōu)點(diǎn):如下圖所示,這時(shí)候我們添加一個(gè)其他的劍,那么我不需要去修改我紅色區(qū)域的東西,僅僅修改CreateSwordFactory.cs這個(gè)類就行,然后這個(gè)類根據(jù)客戶端給出的具體產(chǎn)生什么劍再去實(shí)例化就可以了。不需要了解具體每一個(gè)劍是怎么被創(chuàng)建的。

缺點(diǎn):以為過(guò)多的依賴于工廠類,簡(jiǎn)單工廠模式違背了“開(kāi)放封閉原則”,就是違背了“系統(tǒng)對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉”的原則,因?yàn)楫?dāng)我新增加一個(gè)劍的時(shí)候必須修改工廠類,相應(yīng)的工廠類就需要重新編譯一遍。

到此這篇關(guān)于C#簡(jiǎn)單工廠模式的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#實(shí)現(xiàn)圖片上傳(PC端和APP)保存及 跨域上傳說(shuō)明

    C#實(shí)現(xiàn)圖片上傳(PC端和APP)保存及 跨域上傳說(shuō)明

    這篇文章主要介紹了C#實(shí)現(xiàn)圖片上傳(PC端和APP)保存及 跨域上傳說(shuō)明的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-12-12
  • Windows系統(tǒng)中使用C#讀取文本文件內(nèi)容的小示例

    Windows系統(tǒng)中使用C#讀取文本文件內(nèi)容的小示例

    這篇文章主要介紹了Windows系統(tǒng)中使用C#讀取文本文件內(nèi)容的小示例,包括一次一行地讀取文本文件的方法,需要的朋友可以參考下
    2016-02-02
  • C#圖片壓縮的實(shí)現(xiàn)方法

    C#圖片壓縮的實(shí)現(xiàn)方法

    一般在web應(yīng)用中,對(duì)客戶端提交上來(lái)的圖片肯定需要進(jìn)行壓縮的。尤其是比較大的圖片,如果不經(jīng)過(guò)壓縮會(huì)導(dǎo)致頁(yè)面變的很大,打開(kāi)速度比較慢,當(dāng)然了如果是需要高質(zhì)量的圖片也得需要生產(chǎn)縮略圖。
    2013-02-02
  • Microsoft Expression Web 簡(jiǎn)體中文正式版 官方下載地址

    Microsoft Expression Web 簡(jiǎn)體中文正式版 官方下載地址

    Microsoft Expression Web 簡(jiǎn)體中文正式版 官方下載地址...
    2007-07-07
  • C#使用AnimateWindow()實(shí)現(xiàn)動(dòng)畫窗體的方法

    C#使用AnimateWindow()實(shí)現(xiàn)動(dòng)畫窗體的方法

    用API函數(shù)AnimateWindow函數(shù)來(lái)實(shí)現(xiàn)窗體的動(dòng)畫效果,在C#中,你可以使用P/Invoke技術(shù)調(diào)用Windows API中的AnimateWindow函數(shù)來(lái)實(shí)現(xiàn)動(dòng)畫窗體,本文就給大家介紹了C#使用AnimateWindow()實(shí)現(xiàn)動(dòng)畫窗體的方法,感興趣的朋友可以參考下
    2024-04-04
  • C#中如何正確的使用字符串String

    C#中如何正確的使用字符串String

    這篇文章主要給大家介紹了關(guān)于在C#中如何正確的使用字符串String的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • C# WPF ListView控件的實(shí)例詳解

    C# WPF ListView控件的實(shí)例詳解

    這篇文章主要介紹了C# WPF ListView控件的實(shí)例詳解的相關(guān)資料,希望通過(guò)本能幫助到大家,讓大家掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • C#中FlagsAttribute屬性在enum中的應(yīng)用詳解

    C#中FlagsAttribute屬性在enum中的應(yīng)用詳解

    這篇文章主要介紹了C#中FlagsAttribute屬性在enum中的應(yīng)用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • c#讀取文件詳談

    c#讀取文件詳談

    你平時(shí)是怎么讀取文件的?使用流讀取。是的沒(méi)錯(cuò),C#給我們提供了非常強(qiáng)大的類庫(kù)(又一次吹捧了.NET一番)
    2013-09-09
  • C#開(kāi)發(fā)Windows UWP系列之3D變換

    C#開(kāi)發(fā)Windows UWP系列之3D變換

    這篇文章介紹了C#開(kāi)發(fā)Windows UWP系列之3D變換,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06

最新評(píng)論

库伦旗| 临清市| 汉寿县| 西平县| 拜泉县| 五原县| 敦煌市| 永平县| 轮台县| 白朗县| 叙永县| 鱼台县| 吉水县| 宜兴市| 蓝田县| 西畴县| 常山县| 泰州市| 垫江县| 锦州市| 罗甸县| 车致| 惠来县| 漳浦县| 合作市| 桦川县| 乳山市| 南宁市| 会昌县| 尤溪县| 金阳县| 灌阳县| 临潭县| 琼海市| 秦安县| 新乐市| 拉萨市| 双鸭山市| 威宁| 普兰县| 岳西县|