今天开始学习记录一下学习23种设计模式,本身作为unity开发程序员,那就以unity为开发环境,C#为开发语言来学习设计模式,写下此博客来记录自己的学习过程,学习即成长。水平有限,多多担待。博客以自己的理解来写,如有错误,多多指教。
设计模式一:简单工厂模式
说到简单工厂模式,说明此模式是用来生产的,也就是用来创建实例,我们平常的实例化就是new一个对象,可如果要生产多个不同的对象应该怎么办?我们对实例化对象进行管理,也就是说想要一个实例,不需要在乎这个实例是如何产生的,传入一个类型/特定字符串/特定int 等,就能收到一个标识该类型的对象。
以女娲造人来举例,有黄种人,黑种人,白种人三个类型,这三种都是人,那我们先写一个人类接口IHuman 也可以使用基类,表现效果一样,三类人都 有Speak GetColor 的方法
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace 简单工厂
{
/// <summary>
/// 定义一个人类的接口
/// </summary>
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 简单工厂
{
/// <summary>
/// 简单工厂
/// </summary>
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 脚本扔到场景中,运行看看吧

总结: 简单工厂模式就是简单。让上层代码不需要处理生产流程,也就是说,用户只要结果,不要过程,过程由工厂进行初始化。
优点
(1)简单工厂包含必要的判断逻辑,简单工厂实现了对象的创建和使用的分离。
(2)客户端无需知道所创建的具体产品类的类名,只需要具体产品类对应的参数即可!
(3)在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性
缺点
(1)工厂类的职责过重,从类图中可以看出简单工厂中包含加减乘除的逻辑判断语句,它一旦有问题,整个系统都要出问题
(2)在添加新的类的时候,例如我添加了棕色人,那么系统中的简单工厂类就要修改,违反了开放——封闭原则!这样及其不利于系统的扩展和维护!
(3)简单工厂的静态方法,使得工厂角色无法形成基于继承的等级结构!
本文通过Unity和C#介绍了简单工厂模式的基本概念,通过创建不同人类实例的示例,展示了如何使用简单工厂模式来封装实例创建过程,使上层代码无需关心具体实例的创建细节。
&spm=1001.2101.3001.5002&articleId=106399798&d=1&t=3&u=dacaf77b4a3f4036b78cfe82a75fbe11)

被折叠的 条评论
为什么被折叠?



