如果项目中需要创建一系列具有相同产品簇的产品的时候,可能会产生创建分支过多,创建产品遗漏的风险
这是使用抽象工厂可以有效的避免上述问题
提高封装性,符合单一原则
产品簇具有相同的或者类似的功能结构货性能,共享主要的产品特征,组件,或者子结构
我们可以使用继承等方法实现 从而满足我们想要达到的效果
我们这里设想一下 一个游戏中有人族和兽族 两种大类型的怪物
然后我们需要在场景中不断创建 (实例化出来)
这时我们使用简单抽象工厂模式就很好
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点要同时产出好几种不同的怪物
我们只需新建一个混合工厂 原来产品都可复用
唯一不足之处就是如果结构更改(基类更改),那么所有实现的工厂都需要更改,这种变动是很难让人接受的。
希望我所写的对大家有所帮助