游戏设计模式之简单工厂模式(一)

好久没更新了,这个月开始更新和学习几种游戏设计模式,我根据自己的理解去解释和说明这些模式,也算是为自己做一些积累,如果出现一些理解或者是应用错误,请各位大佬一一指出!!!!!

今天要讲的呢,是简单工厂模式。一听到这个词的时候,是不是觉自己能理解它的意思,工厂嘛,就是可以生产产品的地方,我们所用的所有大多数用品都是在工厂生产的,但是我们消费者一般不直接接触工厂,而是通过中间商人获得产品,而我们自己本身看不到产品的生产过程。

以上一个例子,便是工厂模式的特性。下面,我们通过一个简单的例子用脚本来实现一下。假如现在我们要做一间房子(House),这间房子要建地基,地板,天花板,墙壁,窗户,门这些东西,作为我们设计者本人,我们肯定不会自己去动手建设,而是交由工人叔叔去建设,所以,这里我们使用简单工厂模式来实现一下。

    public class House//房子类
    {
        private string builtTime;
        public string BuiltTime { get => builtTime; set => builtTime = value; }
        public House(string _builttime)
        {
           this.BuiltTime = _builttime;
        }

        public House()
        {

        }

        public virtual void Build() { }
    }

接下去是继承房子的子类

public class _Base : House {
    public _Base(string _builttime):base(_builttime)
    {

    }
    public override void Build()
    {
        Console.WriteLine("于"+BuiltTime+"完成了地基建造");
    }
}
public class _Window : House
{
    public _Window(string _builttime) : base(_builttime)
    {

    }
    public override void Build()
    {
        Console.WriteLine("于" + BuiltTime + "完成了窗户建造");
    }
}
public class _Door : House
{
    public _Door(string _builttime) : base(_builttime)
    {

    }
    public override void Build()
    {
        Console.WriteLine("于" + BuiltTime + "完成了门建造");
    }
}
public class _Wall : House
{
    public _Wall(string _builttime) : base(_builttime)
    {

    }
    public override void Build()
    {
        Console.WriteLine("于" + BuiltTime + "完成了墙壁建造");
    }
}
public class _Ceilings : House
{
    public _Ceilings(string _builttime) : base(_builttime)
    {

    }
    public override void Build()
    {
        Console.WriteLine("于" + BuiltTime + "完成了天花板建造");
    }
}
public class _Floor : House
{
    public _Floor(string _builttime) : base(_builttime)
    {

    }
    public override void Build()
    {
        Console.WriteLine("于" + BuiltTime + "完成了地板建造");
    }
}

然后是工厂加载类

public class BuiltFactory
    {
       //根据所输入需要的类型,获得需要建造的东西
        public static House BuildHouse(string BuildThingsName,string timer)
        {
            House h = null;
            switch (BuildThingsName)
            {
                case "天花板":
                    h = new _Ceilings(timer);
                    break;
                case "地板":
                    h = new _Floor(timer);
                    break;
                case "门":
                    h = new _Door(timer);
                    break;
                case "地基":
                    h = new _Base(timer);
                    break;
                case "窗户":
                    h = new _Window(timer);
                    break;
                case "墙壁":
                    h = new _Wall(timer);
                    break;

                default:
                    break;
            }
            return h;
        }
    }

接着可以试着调用

    class Program
    {
        static void Main(string[] args)
        {
            House 地基 = BuiltFactory.BuildHouse("地基", "2018年3月1日");
            地基.Build();
            House 墙壁 = BuiltFactory.BuildHouse("墙壁", "2018年3月10日");
            墙壁.Build();
            House 地板 = BuiltFactory.BuildHouse("地板", "2018年3月25日");
            地板.Build();
            House 天花板 = BuiltFactory.BuildHouse("天花板", "2018年4月10日");
            天花板.Build();
            House 窗户 = BuiltFactory.BuildHouse("窗户", "2018年4月20日");
            窗户.Build();
            House 门 = BuiltFactory.BuildHouse("门", "2018年4月20日");
            门.Build();
            Console.ReadLine();
        }
    }

结果是:
在这里插入图片描述
完美。

其实这种方式,我觉得也能更好地让我们理解什么是面向对象开发,特别是怎样使开发更简化,更易于维护和修改,后期还会再在unity换装的文章中,使用这种模式进行加载资源与配置资源,所以可以继续关注博主,一起学习哦!!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ToDoNothing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值