Unity设计模式--工厂模式

128 阅读5分钟

工厂模式的使用场景

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()。 然后我们定义了三个具体的对象类ObjectAObjectBObjectC,分别继承自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()。然后我们定义了两个具体的对象类ObjectAObjectB,分别继承自ObjectBase并实现了Show()方法。接着我们定义了一个抽象工厂类FactoryBase,其中定义了一个抽象方法CreateObject()用于创建对象。然后我们又定义了两个具体的工厂类ObjectAFactoryObjectBFactory,分别继承自FactoryBase并实现了CreateObject()方法。在Test类中,我们通过创建一个ObjectAFactory对象,并调用其CreateObject()方法来创建一个ObjectA对象,并调用其Show()方法来显示结果。

工厂模式优缺点

  1. 优点:
  • 工厂模式将对象的创建和使用解耦,降低了对象之间的耦合度,提高了代码的灵活性和可维护性。
  • 工厂模式可以隐藏对象的创建细节,使得客户端无需关注对象的具体创建过程,只需通过工厂类来创建对象。
  • 工厂模式可以通过扩展工厂类来创建不同类型的对象,提供了一种简单的扩展方式。
  1. 缺点:
  • 工厂模式增加了代码的复杂度,需要定义多个工厂类来创建不同类型的对象,增加了代码的量。
  • 工厂模式在增加新的产品时,需要同时修改抽象工厂接口和所有的具体工厂类,违反了开闭原则。

五、总结
工厂模式是一种常用的设计模式,它可以帮助我们更好地创建对象,提高代码的可扩展性和可维护性。在Unity中,我们可以通过简单工厂模式和抽象工厂模式来实现工厂模式。简单工厂模式适用于对象的创建逻辑比较简单的情况,而抽象工厂模式适用于对象的创建逻辑比较复杂的情况。在使用工厂模式的过程中,我们需要根据具体的业务需求选择合适的方式来实现。同时,我们也需要注意工厂模式的缺点,避免过度使用工厂模式导致代码的复杂度增加。