设计模式一:简单工厂模式(Unity+C#)

今天开始学习记录一下学习23种设计模式,本身作为unity开发程序员,那就以unity为开发环境,C#为开发语言来学习设计模式,写下此博客来记录自己的学习过程,学习即成长。水平有限,多多担待。博客以自己的理解来写,如有错误,多多指教。

设计模式一:简单工厂模式

说到简单工厂模式,说明此模式是用来生产的,也就是用来创建实例,我们平常的实例化就是new一个对象,可如果要生产多个不同的对象应该怎么办?我们对实例化对象进行管理,也就是说想要一个实例,不需要在乎这个实例是如何产生的,传入一个类型/特定字符串/特定int 等,就能收到一个标识该类型的对象。

以女娲造人来举例,有黄种人,黑种人,白种人三个类型,这三种都是人,那我们先写一个人类接口IHuman 也可以使用基类,表现效果一样,三类人都 有Speak  GetColor 的方法

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace 简单工厂
{
    /// 
    /// 定义一个人类的接口
    /// 
    public interface IHuman 
    {
         void Speak();

        void GetColor();
    }

    public class YellowMan : IHuman
    {
        public void GetColor()
        {
            Debug.Log("这是一个黄种人");
        }

        public void Speak()
        {
            Debug.Log("黄种人说中文");
        }
    }

    public class WhiteMan : IHuman
    {
        public void GetColor()
        {
            Debug.Log("这是一个白种人");
        }

        public void Speak()
        {
            Debug.Log("黄种人说英文");
        }
    }
    public class BlackMan : IHuman
    {
        public void GetColor()
        {
            Debug.Log("这是一个白种人");
        }

        public void Speak()
        {
            Debug.Log("黄种人说英文");
        }
    }
}

三种人的类已经创建好了,要开始进行工厂生产了,创建一个工厂类Factory,传入约定好的字符串/Int/ 类型,即可以开始生产了,这里用一个静态的生产方法来进行生产,所以简单工厂模式又被称为静态生产模式。什么?不想用静态,还可以进行再次封装下这个工厂,把工厂抽象出来?那就是工厂模式和抽象工厂模式了,下章再说。。。



namespace 简单工厂
{
    /// 
    /// 简单工厂
    /// 
    public class Factory 
    {
        public static IHuman CreateHuman(string huManType)
        {
            switch (huManType)
            {
                case "YellowMan":
                    return new YellowMan();

                case "WhiteMan":
                    return new WhiteMan();

                case "BlackMan":
                    return new BlackMan();
                default:
                    break;
            }
            return null;
        }
    }
}

现在我们要做个测试了,要去生产加工人类了,只需要传入想生产的类型,即可返回你所需要的的实例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace 简单工厂
{
    public class Test : MonoBehaviour
    {
        // Start is called before the first frame update
        void Start()
        {
            YellowMan yellowMan=(YellowMan) Factory.CreateHuman("YellowMan");
            yellowMan.Speak();
            yellowMan.GetColor();

            WhiteMan whiteMan = (WhiteMan)Factory.CreateHuman("WhiteMan");
            whiteMan.Speak();
            whiteMan.GetColor();

            BlackMan blackMan = (BlackMan)Factory.CreateHuman("BlackMan");
            blackMan.Speak();
            blackMan.GetColor();

        }


    }
}

将Test.cs 脚本扔到场景中,运行看看吧

设计模式一:简单工厂模式(Unity+C#)_第1张图片

总结: 简单工厂模式就是简单。让上层代码不需要处理生产流程,也就是说,用户只要结果,不要过程,过程由工厂进行初始化。

优点
(1)简单工厂包含必要的判断逻辑,简单工厂实现了对象的创建和使用的分离。
(2)客户端无需知道所创建的具体产品类的类名,只需要具体产品类对应的参数即可!
(3)在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性

缺点
(1)工厂类的职责过重,从类图中可以看出简单工厂中包含加减乘除的逻辑判断语句,它一旦有问题,整个系统都要出问题
(2)在添加新的类的时候,例如我添加了棕色人,那么系统中的简单工厂类就要修改,违反了开放——封闭原则!这样及其不利于系统的扩展和维护!
(3)简单工厂的静态方法,使得工厂角色无法形成基于继承的等级结构!

你可能感兴趣的:(设计模式学习)