unity设计模式(简单抽象工厂)

如果项目中需要创建一系列具有相同产品簇的产品的时候,可能会产生创建分支过多,创建产品遗漏的风险
这是使用抽象工厂可以有效的避免上述问题
提高封装性,符合单一原则

产品簇具有相同的或者类似的功能结构货性能,共享主要的产品特征,组件,或者子结构
我们可以使用继承等方法实现 从而满足我们想要达到的效果

我们这里设想一下 一个游戏中有人族和兽族 两种大类型的怪物
然后我们需要在场景中不断创建 (实例化出来)
这时我们使用简单抽象工厂模式就很好

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MonsterFactory : MonoBehaviour
{
    public interface RunMonster { };//步兵

    public interface FlyMonster { };//飞行兵

    public interface SwinMonster { };//潜水兵

    /// <summary>
    /// 人族怪物
    /// </summary>
    public class PeopleRun : RunMonster
    {

    }
    public class PeopleFly : FlyMonster
    {
        
    }
    public class PeopleSwin : SwinMonster
    {

    }
    /// <summary>
    /// 兽族怪物
    /// </summary>
    public class AnimalRun : RunMonster
    {
      
    }
    public class AnimalFly : FlyMonster
    {

    }
    public class AnimalSwin : SwinMonster
    {

    }
    /// <summary>
    /// 抽象工厂类
    /// </summary>
    public abstract class MonsterFactorys
    {
        public abstract RunMonster CreateRunMonster();

        public abstract FlyMonster CreateFlyMonster();

        public abstract SwinMonster CreateSwinMonster();
    }
    /// <summary>
    /// 人族工厂
    /// </summary>
    public class PeopleFactory:MonsterFactorys
    {
        public override FlyMonster CreateFlyMonster()
        {
            return new  PeopleFly();
        }

        public override RunMonster CreateRunMonster()
        {
            return new PeopleRun();
        }

        public override SwinMonster CreateSwinMonster()
        {
            return new PeopleSwin();
        }
    }
    /// <summary>
    /// 兽族工厂
    /// </summary>
    public class AnimalFactory : MonsterFactorys
    {
        public override FlyMonster CreateFlyMonster()
        {
            return new AnimalFly();
        }

        public override RunMonster CreateRunMonster()
        {
            return new AnimalRun();
        }

        public override SwinMonster CreateSwinMonster()
        {
            return new AnimalSwin();
        }
    }
    public void TestFactory()
    {
        AnimalFactory animfactory = new AnimalFactory();
        animfactory.CreateFlyMonster();
        animfactory.CreateRunMonster();
        animfactory.CreateSwinMonster();

        PeopleFactory peoplrfactory = new PeopleFactory();
        peoplrfactory.CreateFlyMonster();
        peoplrfactory.CreateRunMonster();
        peoplrfactory.CreateSwinMonster();
    }
}

抽象工厂最大的好处就是可以批量生产和不同产品的替换和组合
批量生产如实例所示 假如要生产出不同的飞行兵,步兵,潜行兵 我们创建一个工厂即可全部搞定
不同产品的替换和组合如果在项目中需要混合生产怪物 比如A点要同时产出好几种不同的怪物
我们只需新建一个混合工厂 原来产品都可复用

唯一不足之处就是如果结构更改(基类更改),那么所有实现的工厂都需要更改,这种变动是很难让人接受的。

希望我所写的对大家有所帮助

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值