知方号

知方号

Unity设计模式

Unity设计模式

工厂模式的使用场景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中,我们可以通过简单工厂模式和抽象工厂模式来实现工厂模式。简单工厂模式适用于对象的创建逻辑比较简单的情况,而抽象工厂模式适用于对象的创建逻辑比较复杂的情况。在使用工厂模式的过程中,我们需要根据具体的业务需求选择合适的方式来实现。同时,我们也需要注意工厂模式的缺点,避免过度使用工厂模式导致代码的复杂度增加。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。