定义
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。(依旧百度复制)
我理解的就是,例如 在游戏中我们需要建造不同的房子,我们只需要告诉创建房子的工厂我们需要什么类型的房子,工厂就会返回相应风格的实例
结构
Factory工厂类
工厂类就是负责创建所有实例的逻辑,判断创建哪一个实例,创建实例的函数可以被外界调用
IInstance
所有实例对象的父类,负责所有实例的公共接口
Instance
具体的实例对象
举个栗子
如上文所提的,我们现在要实现一个建造不同风格的房子程序,我们需要实现中式风格,欧式风格,中世纪风格的房子,后续可能还会添加更多风格
具体实现
创建抽象类
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public abstract class Room {
//建造房子
public abstract void BulidRoom();
}
中式风格的房子
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ChineseStyleRoom : Room
{
public override void BulidRoom()
{
Debug.Log("创建中式风格的房子");
}
}
欧式风格的房子
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EuropeanStyleRoom : Room {
public override void BulidRoom()
{
Debug.Log("创建欧式风格的房子");
}
}
中世纪风格的房子
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MedievalStyleRoom : Room {
public override void BulidRoom()
{
Debug.Log("创建中世纪风格房子");
}
}
工厂类
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RoomBulidFactory {
public enum RoomStyle
{
ChineseStyle,
MedievalStyle,
EuropeanStyle
}
public Room CreatRoom(RoomStyle roomStyle)
{
Room room=null;
switch (roomStyle)
{
case RoomStyle.ChineseStyle:
room = new ChineseStyleRoom();
break;
case RoomStyle.MedievalStyle:
room = new EuropeanStyleRoom();
break;
case RoomStyle.EuropeanStyle:
room = new MedievalStyleRoom();
break;
default:
break;
}
return room;
}
}
客户端程序,创建房子
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BulidRoom : MonoBehaviour {
// Use this for initialization
void Start () {
RoomBulidFactory roomBulidFactory = new RoomBulidFactory();
Room room1 = roomBulidFactory.CreatRoom(RoomBulidFactory.RoomStyle.ChineseStyle);
Room room2 = roomBulidFactory.CreatRoom(RoomBulidFactory.RoomStyle.EuropeanStyle);
Room room3 = roomBulidFactory.CreatRoom(RoomBulidFactory.RoomStyle.MedievalStyle);
room1.BulidRoom();
room2.BulidRoom();
room3.BulidRoom();
}
}
运行结果
简单工厂模式的好处
关于创建实例的判断在工厂类中,避免了当增加新需求的时候,需要修改客户端程序,也可以通过增加配置文件来增加新的实例