设计模式-(工厂模式)

定义

定义一个可以产生对象的接口,但是让子类决定要产生哪一个类的对象。工厂方法模式让类的实例化程序延迟到子类中实施。

组成部分

Product(产品类)
定义产品类的操作接口,而这个产品将由工厂产生。
ConcreteProduct(产品实现)
实现产品功能的类,可以不只是定义一个产品实现类,这些产品实现类的对象都会由ConcreteCreator(工厂实现类)产生。
Creator(工厂类)
定义能产生Product的方法:FactoryMethod
ConcreteCreator(工厂实现类)
实现FactoryMethod,并产生指定的ConcreteProduct(产品实现)

游戏应用

在设计植物大战僵尸中,植物和僵尸的产生是用了工厂模式
Product

public class IEnemy : ICharacter
{
}

ConcreteProduct

public class EnemyProduct1 : IEnemy
{
    
}

public class EnemyProduct2 : IEnemy
{

}

Creator

public abstract class ICharacterFactory 
{
    public abstract void InitPlant(string plantName, int x, int y);
    public abstract void InitEnemy(string enemyName, int x, int y);
}

ConcreteCreator

public class CharacterFactory : ICharacterFactory
{
    IEnemy enemy;
    public override void InitEnemy(string enemyName, int x, int y)
    {
        if (enemyName == "普通僵尸")
        {
            enemy = new EnemyProduct1();
        }
        else if (enemyName == "铁通僵尸")
        {
            enemy = new EnemyProduct2();
        }
        //实例化敌人
        //GameObject.Instantiate()
        //设置武器
        //设置属性
    }

    public override void InitPlant(string plantName, int x, int y)
    {
       //与敌人一样,就不再描述
    }
}

在实例化中可以通过传入字符串或者枚举或者使用泛型都是可以。

优缺点

优点是将类群组对象的产生流程整合与同一个类下实现,并提供唯一的工厂方法,让项目内的对象产生流程更加独立,不过,当类群组过多时,无论使用哪些方式,都会出现工厂子类爆量或switchcase语句过长的问题,这个时美中不足的地方。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值