C#实现简单工厂模式

 更新时间:2022年07月08日 17:00:53   作者:奋斗的大橙子  
这篇文章介绍了C#实现简单工厂模式的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

情景:有一个怪兽,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#简单工厂模式的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持程序员之家。

相关文章

  • C# AE之返回上一级和下一级的实战操作

    C# AE之返回上一级和下一级的实战操作

    这篇文章主要介绍了C# AE之返回上一级和下一级的实战操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 如何用C#验证IP是否为局域网地址

    如何用C#验证IP是否为局域网地址

    这篇文章主要介绍了如何用C#验证IP是否为局域网地址,文中讲解非常细致,代码帮助大家更好的参考和学习,感兴趣的朋友可以了解下
    2020-06-06
  • C#中时间的几种格式转换方法

    C#中时间的几种格式转换方法

    有时候我们要对C#时间进行转换,达到不同的显示效果,这里简单介绍下,方便需要的朋友
    2013-09-09
  • VB.NET中Caching的使用方法

    VB.NET中Caching的使用方法

    Caching缓存,就是将一些生成代价比较大的常用数据,保存起来重用。一般数据都保存在内存中,因为从内存中读取数据比从数据库等其他地方要快。
    2013-04-04
  • 利用C#实现记事本的功能的示例代码

    利用C#实现记事本的功能的示例代码

    这篇文章主要为大家详细介绍了如何利用C#实现简单的记事本的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • C#计算两个时间差的方法代码分享

    C#计算两个时间差的方法代码分享

    做项目需要用到计算时间差,就整理出来供有需要的朋友参考一下
    2013-12-12
  • C#编程实现QQ界面的方法

    C#编程实现QQ界面的方法

    这篇文章主要介绍了C#编程实现QQ界面的方法,较为详细的分析了C#实现模拟QQ登录界面的具体步骤与相关实现代码,需要的朋友可以参考下
    2016-03-03
  • C# WebClient类用法实例

    C# WebClient类用法实例

    这篇文章主要介绍了C# WebClient类用法实例,本文讲解使用WebClient下载文件、OpenWriter打开一个流使用指定的方法将数据写入到uri以及上传文件示例,需要的朋友可以参考下
    2015-07-07
  • 详解C# 线程的挂起与唤醒

    详解C# 线程的挂起与唤醒

    这篇文章主要介绍了详解C# 线程的挂起与唤醒,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-05-05
  • 浅析C# 结构体struct

    浅析C# 结构体struct

    这篇文章主要介绍了C# 结构体struct 的相关资料,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下
    2020-08-08

最新评论

?


http://www.vxiaotou.com