ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

23中GOF设计模式之工厂方法模式

23中GOF设计模式之工厂方法模式 工厂方法模式抽象创建者 多个具体创建者子类工厂加产品新建子类不改老代码。抽象创建者作为各个子类工厂的父类负责提供通用容器逻辑预留抽象工厂方法作为子类的模版。子类工厂重写工厂方法创建属于自己的同类型产品各个建立者之间相互独立互不干扰。新增一套产品组合只新增一个子类即可原有代码不动。举例游戏技能书。抽象创建者 SkillBook 提供技能书模板技能列表容器子类创建者FireSkillBook、IceSkillBook重写工厂方法向列表填充技能。A 技能书技能 1、2、3B 技能书技能 1、3、4两套互相独立不会互相影响。新增一种技能书新建一个 SkillBook 子类即可。using NUnit.Framework; using System.Collections.Generic; using UnityEngine; public class FactoryMethodPatternExample3 : MonoBehaviour { // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { SkillBookFactory[] skillBookFactories new SkillBookFactory[3] { new FireSkillBookFactory(), new LightningSkillBookFactory(), new RandomSkillBookFactory() }; foreach (var skillBookFactory in skillBookFactories) { Debug.Log($Skill Book Factory: {skillBookFactory.GetType().Name}); foreach (var skill in skillBookFactory.Skills) { Debug.Log($Skill: {skill.GetType().Name}); } } } // Update is called once per frame void Update() { } } abstract class Skill { } class FireBall : Skill { } class FireStorm : Skill { } class FireWall : Skill { } class LightningBolt : Skill { } class LightningStorm : Skill { } abstract class SkillBookFactory { ListSkill _skills new ListSkill(); public ListSkill Skills { get { return _skills; } } public abstract void CreateSkills(); public SkillBookFactory() { CreateSkills(); } } class FireSkillBookFactory : SkillBookFactory { public override void CreateSkills() { Skills.Add(new FireBall()); Skills.Add(new FireStorm()); Skills.Add(new FireWall()); } } class LightningSkillBookFactory : SkillBookFactory { public override void CreateSkills() { Skills.Add(new LightningBolt()); Skills.Add(new LightningStorm()); } } class RandomSkillBookFactory : SkillBookFactory { public override void CreateSkills() { Skills.Add(new FireBall()); Skills.Add(new LightningBolt()); } }
返回列表