工厂模式介绍
实际上就是下图的模式
实现思路分析
首先,工厂模式是一个类
其次,工厂模式的最大特点就是不要去从外部new(实例化),而是通过工厂去实例化对象
比如我需要三个类对象,分别是哥布林,巨魔和史莱姆,那么就可以创建一个怪物工厂,从工厂中去创建实例,然后拿去用
那么思路就清晰了
1.定义一个怪物接口,以实现怪物通用逻辑
public interface Enemy
{
void Attack();
void Dead();
}
之后创建怪物类并实现接口
public class Slime : Enemy {
public void Attack() {
Debug.Log("");
}
void Enemy.Dead() {
}
}
public class Goblin : Enemy {
public void Attack() {
}
void Enemy.Dead() {
}
}
public class Troll : Enemy {
public void Attack() {
}
void Enemy.Dead() {
}
}
2.创建一个怪物工厂类
注意,我们应该有一种判断怪物类型的标识,可以是字符串,也可以是枚举,那我就使用枚举了
public enum E_Enemy {
Slime,
//下面可以自行添加敌人类型
Goblin,
Troll
}
传进来枚举变量对应就返回实例即可,如果你这个工厂想要唯一实现,那么可以写作单例模式
public class SingleBase<T> where T : new() { private static T instance = new T() ; public static T Instance => instance; }
泛型单例模式基类,将继承的类做单例模式处理
class Factory:SingleBase<Factory>
{
public Enemy CreateEnemy(E_Enemy e_Enemy)
{
switch (e_Enemy) {
case E_Enemy.Slime:
return new Slime();
case E_Enemy.Goblin:
return new Goblin();
case E_Enemy.Troll:
return new Troll();
default:
break;
}
return null;
}
}
3.使用方法
外部传入枚举后,创建一个新的类(Test),直接调用工厂方法调用即可
public class Test : MonoBehaviour
{
E_Enemy Enemy;
// Start is called before the first frame update
void Start()
{
Enemy = E_Enemy.Goblin;
Enemy enemy = Factory.Instance.CreateEnemy(Enemy);
enemy?.Attack();
}}
代码总览
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
public enum E_Enemy {
Slime,
//下面可以自行添加敌人类型
Goblin,
Troll
}
public interface Enemy
{
void Attack();
void Dead();
}
public class Slime : Enemy {
public void Attack() {
Debug.Log("");
}
void Enemy.Dead() {
}
}
public class Goblin : Enemy {
public void Attack() {
}
void Enemy.Dead() {
}
}
public class Troll : Enemy {
public void Attack() {
}
void Enemy.Dead() {
}
}
class Factory:SingleBase<Factory>
{
public Enemy CreateEnemy(E_Enemy e_Enemy)
{
switch (e_Enemy) {
case E_Enemy.Slime:
return new Slime();
case E_Enemy.Goblin:
return new Goblin();
case E_Enemy.Troll:
return new Troll();
default:
break;
}
return null;
}
}
怎么样,是不是非常简单,在次基础上你可以有更多接口,更多工厂