工厂模式的使用场景
1.what(是什么)
工厂模式是一种创建型设计模式,提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不使用new关键字,而是通过调用工厂方法来创建对象。
工厂方法是一种在子类中定义的方法,该方法负责实例化对象。工厂方法可以创建一组相关或不相关的对象,实现对象的创建和使用解耦。
2.why(为什么)
工厂模式提供了一种抽象工厂,通过使用工厂方法来创建对象。工厂方法将对象的创建推迟到了子类中,这样就可以实现对象的创建和使用解耦。
3.when(什么时候用)
当一个类不知道它所需要的对象的确切类时;
当一个类希望由子类来指定它所创建的对象时;
当一个类将创建对象的职责委托给多个帮助子类中的某一个,且希望那一个帮助子类是代理者这一信息局部化时。
4.how(怎么用)
工厂模式的实现有两种方式:简单工厂模式和抽象工厂模式
4.1简单工厂模式
简单工厂模式通过一个工厂类来创建对象。在简单工厂模式中,对象的创建逻辑封装在工厂类中,通过调用工厂类的静态方法来创建对象。 示例代码:
public enum ObjectType
{
TypeA,
TypeB,
TypeC
}
public abstract class ObjectBase
{
public abstract void Show();
}
public class ObjectA : ObjectBase
{
public override void Show()
{
Debug.Log("Object A");
}
}
public class ObjectB : ObjectBase
{
public override void Show()
{
Debug.Log("Object B");
}
}
public class ObjectC : ObjectBase
{
public override void Show()
{
Debug.Log("Object C");
}
}
public class ObjectFactory
{
public static ObjectBase CreateObject(ObjectType type)
{
switch (type)
{
case ObjectType.TypeA:
return new ObjectA();
case ObjectType.TypeB:
return new ObjectB();
case ObjectType.TypeC:
return new ObjectC();
default:
return null;
}
}
}
public class Test : MonoBehaviour
{
void Start()
{
ObjectBase obj = ObjectFactory.CreateObject(ObjectType.TypeA);
obj.Show();
}
}
描述:
在上述代码中,我们定义了一个枚举ObjectType来表示不同的对
象类型,然后定义了一个抽象类ObjectBase作为对象的基类,其中包含
一个抽象方法Show()。
然后我们定义了三个具体的对象类ObjectA、ObjectB和ObjectC,分别继承自ObjectBase并实现了Show()方法。
最后我们定义了一个ObjectFactory工厂类,其中包含一个静态方
法CreateObject()来根据传入的对象类型创建相应的对象。在Test类中,我们通过调用ObjectFactory.CreateObject()方法来创建ObjectA对象,并调用其Show()方法来显示结果。
抽象工厂模式
抽象工厂模式通过一个抽象工厂接口和多个具体工厂类来实现。在抽象工 厂模式中,抽象工厂接口定义了一组创建对象的方法,具体工厂类实现了这些方法来创建具体的对象。 示例代码:
public abstract class ObjectBase
{
public abstract void Show();
}
public class ObjectA : ObjectBase
{
public override void Show()
{
Debug.Log("Object A");
}
}
public class ObjectB : ObjectBase
{
public override void Show()
{
Debug.Log("Object B");
}
}
public abstract class FactoryBase
{
public abstract ObjectBase CreateObject();
}
public class ObjectAFactory : FactoryBase
{
public override ObjectBase CreateObject()
{
return new ObjectA();
}
}
public class ObjectBFactory : FactoryBase
{
public override ObjectBase CreateObject()
{
return new ObjectB();
}
}
public class Test : MonoBehaviour
{
void Start()
{
FactoryBase factory = new ObjectAFactory();
ObjectBase obj = factory.CreateObject();
obj.Show();
}
}
描述:
在上述代码中,我们定义了一个抽象类ObjectBase作为对象的基类,其中包含一个抽象方法Show()。然后我们定义了两个具体的对象类ObjectA和ObjectB,分别继承自ObjectBase并实现了Show()方法。接着我们定义了一个抽象工厂类FactoryBase,其中定义了一个抽象方法CreateObject()用于创建对象。然后我们又定义了两个具体的工厂类ObjectAFactory和ObjectBFactory,分别继承自FactoryBase并实现了CreateObject()方法。在Test类中,我们通过创建一个ObjectAFactory对象,并调用其CreateObject()方法来创建一个ObjectA对象,并调用其Show()方法来显示结果。
工厂模式优缺点
- 优点:
- 工厂模式将对象的创建和使用解耦,降低了对象之间的耦合度,提高了代码的灵活性和可维护性。
- 工厂模式可以隐藏对象的创建细节,使得客户端无需关注对象的具体创建过程,只需通过工厂类来创建对象。
- 工厂模式可以通过扩展工厂类来创建不同类型的对象,提供了一种简单的扩展方式。
- 缺点:
- 工厂模式增加了代码的复杂度,需要定义多个工厂类来创建不同类型的对象,增加了代码的量。
- 工厂模式在增加新的产品时,需要同时修改抽象工厂接口和所有的具体工厂类,违反了开闭原则。
五、总结
工厂模式是一种常用的设计模式,它可以帮助我们更好地创建对象,提高代码的可扩展性和可维护性。在Unity中,我们可以通过简单工厂模式和抽象工厂模式来实现工厂模式。简单工厂模式适用于对象的创建逻辑比较简单的情况,而抽象工厂模式适用于对象的创建逻辑比较复杂的情况。在使用工厂模式的过程中,我们需要根据具体的业务需求选择合适的方式来实现。同时,我们也需要注意工厂模式的缺点,避免过度使用工厂模式导致代码的复杂度增加。