工厂方法
定义
工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
简单工厂与工厂方法的区别
-
简单工厂:提供一个工厂生产不同的物品;(
一个工厂生产多种产品
) -
工厂方法:为每种不同的物品都提供一个工厂进行生产;(
一个工厂生产一样产品
) -
当要在简单工厂方法里增加一种物品时,需要在它所提供的工厂里进行代码修改把新加的物品加入工厂中;而使用工厂方法,就可以单独为这种物品新建一个工厂,由客户端直接使用该工厂生产该物品即可,符合
开放-封闭原则
; -
两者都是集中封装了对象的创建,使得更换对象时,不需要做大的改动就可以实现,降低客户端与产品对象的耦合。
UML图
基本实现代码
Product
:抽象产品类
abstract class Product(val name: String) {
}
ProdcutA
:产品类A
class ProductA : Product("产品A")
IFactory
:工厂接口
interface IFactory {
/**
* 提供一个创建产品的方法
*/
fun createProduct(): Product
}
ProductAFactory
:产品A的工厂
class ProductAFactory : IFactory {
override fun createProduct(): Product {
return ProductA()
}
}
Client
:客户端
class Client {
companion object {
@JvmStatic
fun main(args: Array<String>) {
val productA = ProductAFactory().createProduct()
}
}
}
工厂方法的优缺点
- 优点:工厂方法是简单工厂的进一步抽象和推广,符合
开放-封闭原则
。 - 不足:需要修改客户端的代码,来决定使用哪个工厂。