GoF中定义:
“定义一个可以产生对象的接口,但是让子类决定要产生哪一个类的对象。工厂方法模式让类的实例化程序延迟到子类中实施”
当类的对象产生时,若出现下列情况:
1.需要复杂的流程
2.需要加载外部资源,如从网络、存储设备、数据库
3.有对象上限
4.可重复利用
建议使用工厂方法模式来实现一个工厂类。
public abstract class Product { }
public class ConcreteProductA : Product {
public ConcreteProductA() {
Debug.Log("生成对象类A");
}
}
public class ConcreteProductB : Product {
public ConcreteProductB() {
Debug.Log("生成对象类B");
}
}
interface Creator_GenericMethod {
Product FactoryMethod<T>() where T : Product,new();
}
public class ConcreteCreator_GenericMethod : Creator_GenericMethod {
public ConcreteCreator_GenericMethod() {
Debug.Log("产生工厂:ConcreteCreator_GenericMethod");
}
public Product FactoryMethod<T>() where T : Product,new() {
return new T();
}
}
//测试类
public class FactoryMethodTest {
Product theProduct = null;
void UnitTest() {
Creator_GenericMethod theCreatorGM = new ConcreteCreator_GenericMethod();
theProduct = theCreatorGM.FactoryMethod<ConcreteProductA>();
theProduct = theCreatorGM.FactoryMethod<ConcreteProductB>();
}
}
//执行结果
产生工厂:ConcreteCreator_MethodType
生成对象类A
生成对象类B
工厂方法模式的优点是
将类群组对线的产生流程整合与同一个类下实现
并提供唯一的方法,让项目内的“对象产生流程”更加独立
文章整理自书籍《设计模式与游戏完美开发》 菜升达 著