《设计模式与游戏完美开发》——第十周读书笔记

这一周做一下关于工厂方法模式的原理笔记。
前言:在任何一个游戏中,打怪肯定是必不可少的原则,而现在很多的MMORPG里面,怪物也是做的种类越来越多,而这些怪物肯定是游戏运行过程中,动态创建的。而在面向对象编程里面,这些怪物也就是被各自的类,动态生成出来的对象,比如说骷髅小怪——就是由他的父类“骷髅怪”实例化出来的,而在游戏中,生成一个怪物,肯定要生成他的模型,他的初始化位置,初始化AI,初始化能力值,最后把这些全部组装在一起,就生成了一个在游戏中的怪物,这样就是生成这个对象的具体流程,但是每一种不同的怪,或者说是每一类不同的怪,完成这些流水线的拼装操作都是相同,但是由于可能需要由不同的系统来负责生成,这就导致了,这种能生成怪物模型的类,可能被不同的系统,都持有并且结构高度近似,这是把产生相同的类群组对象的实现,分开在不同功能中控制了,也不便于代码维护,因此引入了——工厂方法模式。
工厂方法模式
GoF对工厂方法模式的解释是:
“定义一个可以产生对象的接口,但是让子类决定要产生哪一个类的对象。工厂方法模式让类的实例化程序延迟到子类中实施。”
图解及模拟代码
在这里插入图片描述
模拟代码:
这个只是其中的一种实现方式:

using System;


namespace ConsoleApp1
{
    //工厂类
    public abstract class Creator
    {
        //设置工厂生产哪种产品
        public abstract  Product FactoryMethod() ;
    }
    //生产产品类
    public abstract  class Product
    {

    }
    //生产产品A类
    public class ConcreteProductA : Product
    {
        //构造时候生产 实际中是有一定的步骤和算法
        public ConcreteProductA()
        {
            Console.WriteLine("生产对象A");
        }
    }
    //生产产品B类
    public class ConcreteProductB : Product
    {
        public ConcreteProductB()
        {
            Console.WriteLine("生产对象B");
        }
    }
    //生产A产品的工厂
    public class ConcreteCreatorProuctA : Creator
    {
        public ConcreteCreatorProuctA()
        {
            Console.WriteLine("产生生产A的工厂");
        }
        public override Product FactoryMethod()
        {
            //子类上溯为父类
            return new ConcreteProductA();
        }
    }
    public class ConcreteCreatorProuctB : Creator
    {
        public ConcreteCreatorProuctB()
        {
            Console.WriteLine("产生生产B的工厂");
        }
        public override Product FactoryMethod()
        {
            //子类上溯为父类
            return new ConcreteProductB();
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            //产品
            Product theProduct = null;

            //工厂接口
            Creator theCreator = null;

            //设置为负责生产A的工厂
            theCreator = new ConcreteCreatorProuctA();
            //生产产品
            theProduct = theCreator.FactoryMethod();

            //设置为生产B的工厂
            theCreator = new ConcreteCreatorProuctB();
            theProduct = theCreator.FactoryMethod();
            Console.ReadKey();
        }
    }
}

运行结果:
在这里插入图片描述
这个看起来和策略模式、模板方法,有一点类似,模板方法是一个方法里面大部分流程是相似,而仅仅有一部分改变,把方法抽象,而这个工厂是整个类对象的构建过程流程相似,因此把他抽象,而策略模式是一群组算法,抽象,从这三者可以互相理解其中的原理,基本就是当一个步骤有重复或者很相似时候,都会被抽象出一个公共接口,而客户端只管调,不管实现,这大大降低了代码的耦合性。
以上就是本周的读书笔记。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

风萧水寒人往前

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

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

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

打赏作者

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

抵扣说明:

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

余额充值