Unity 设计模式 之 创造型模式-【工厂方法模式】【抽象工厂模式】
目录
Unity 设计模式 之 创造型模式-【工厂方法模式】【抽象工厂模式】
二、工厂方法模式 (Factory Method Pattern)
4、具体工厂类 (CubeFactory 和 SphereFactory)
四、抽象工厂模式 (Abstract Factory Pattern)
一、简单介绍
设计模式 是指在软件开发中为解决常见问题而总结出的一套 可复用的解决方案。这些模式是经过长期实践证明有效的 编程经验总结,并可以在不同的项目中复用。设计模式并不是代码片段,而是对常见问题的 抽象解决方案,它提供了代码结构和模块间交互的一种设计思路,帮助开发者解决特定的设计问题。
设计模式的特点:
- 通用性:设计模式针对的是软件开发中常见的设计问题,适用于各种软件工程项目。
- 可复用性:设计模式可以在不同项目和环境下被重复使用,提高代码的可维护性和扩展性。
- 可扩展性:设计模式有助于让代码结构更加灵活,易于扩展和修改。
- 模块化:通过设计模式,可以减少代码的耦合性,增强模块间的独立性。
- 提高沟通效率:设计模式为开发者提供了一种通用的设计语言,使得团队成员能够快速理解并讨论设计方案。
二、工厂方法模式 (Factory Method Pattern)
工厂方法模式 是一种创建型设计模式,用于定义一个用于创建对象的接口,但让子类决定实例化哪个具体类。它将 实例化对象的任务 推迟给子类,以解决创建对象时可能产生的耦合问题。
工厂方法模式的工作原理:
工厂方法模式的核心思想是 推迟实例化,将对象的创建延迟到子类中。通过定义一个抽象工厂类,客户端可以通过这个工厂接口生成产品对象,而不需要知道具体的类名,避免了直接使用
new
关键字创建对象。子类负责实现工厂方法,根据不同的业务需求来决定返回哪个产品对象。
工厂方法模式主要有以下几个组成部分:
- 产品接口(Product):定义所创建对象的通用接口。
- 具体产品类(ConcreteProduct):实现产品接口的具体类,表示不同的对象类型。
- 工厂接口(Creator):声明工厂方法,它返回产品接口的实例,通常是抽象类或接口。
- 具体工厂类(ConcreteCreator):实现工厂接口,并负责具体产品对象的实例化。
工厂方法模式的结构图
Product
:抽象产品ConcreteProduct
:具体产品Creator
:抽象工厂(包含工厂方法)ConcreteCreator
:具体工厂
classDiagram
class Creator {
<<abstract>>
+ factoryMethod() Product
}
class ConcreteCreator {
+ factoryMethod() ConcreteProduct
}
class Product {
<<abstract>>
}
class ConcreteProduct {
}
Creator <-- ConcreteCreator
Creator --> Product
ConcreteCreator --> ConcreteProduct
Product <|-- ConcreteProduct
1、什么时候使用工厂方法模式
对象创建过程复杂且可能发生变化时:
- 如果对象的创建过程涉及多个步骤,或者需要初始化大量参数,可以使用工厂方法模式将这些复杂的创建过程封装起来。当对象创建的逻辑变得更加复杂时,可以通过扩展工厂来简化代码维护。
当需要遵循开闭原则时:
- 如果系统需要根据不同的需求扩展不同的产品类,且不希望修改现有代码,工厂方法模式是理想选择。通过扩展新的具体工厂类,可以实现新的对象类型,而不影响现有系统。
系统中有许多类似的对象,且需要灵活的控制其创建过程时:
- 在某些情况下,系统中可能有多种不同的对象,每个对象都有各自的创建方式,使用工厂方法模式可以灵活地决定创建哪种类型的对象,而不必直接依赖于具体类。
当具体类的初始化工作依赖于外部资源时:
- 例如,在游戏开发中,工厂方法可以用来创建游戏对象,将资源加载、配置和初始化的过程封装在工厂中。
2、使用工厂模式的好处
解耦对象创建和使用:
- 工厂方法模式将对象的创建逻辑与业务逻辑分离,避免了在代码中直接实例化对象(使用
new
关键字),从而降低了代码的耦合性。提高代码的扩展性:
- 工厂方法模式符合开闭原则(OCP),当需要添加新产品时,不需要修改现有代码,只需增加新的具体产品类和对应的工厂实现。这使得系统在面对新需求时可以轻松扩展。
简化对象创建过程:
- 对于某些复杂对象的创建过程,工厂模式隐藏了这些细节,只需调用工厂方法即可获得对象实例。工厂封装了具体的创建逻辑,客户端不必关心对象的构造过程。
增强代码可维护性:
- 通过将对象创建逻辑封装在工厂中,所有对象的生成都集中管理。如果需要修改某类对象的创建过程,只需修改工厂类即可,不会影响到其他使用该对象的代码。
支持不同的对象实例化:
- 工厂方法模式允许在运行时决定生成何种对象实例,提供了更大的灵活性。例如,不同的子类可以根据业务逻辑创建不同的产品,而不用修改原有代码。
3、使用工厂方法模式时的注意事项
工厂类的数量增加:
- 如果系统中有很多不同的产品类型,会产生大量的具体工厂类,增加了类的数量。可以通过简单工厂模式或抽象工厂模式来减少工厂类数量。
增加了代码的复杂性:
- 工厂方法模式虽然提供了灵活性,但也增加了代码的复杂性,特别是在需要创建大量具体产品时,必须为每个产品创建单独的工厂类。
适合对象创建逻辑复杂的情况:
- 如果对象的创建过程非常简单,使用工厂方法模式可能会显得过于复杂,直接实例化对象反而更简洁明了。