工厂模式Factory Pattern 【kotlin版代码参考】
interface Coffee {
fun test()
}
class Cappuccino : Coffee {
companion object {
const val TAG = "Cappuccino"
}
override fun test() {
Log.e(TAG, "Cappuccino ")
}
}
class CoffeeFactory {
companion object {
(Throwable::class)
fun <T : Coffee> create(clazz: Class<T>?): T? {
if (clazz != null) {
return clazz.newInstance()
}
return null
}
}
}
CoffeeFactory.create(Cappuccino::class.java)?.test()
适用场景:
1、工厂类负责创建的对象较少。
2、客户端只需要传入工厂类的参数,对于如何创建的对象的逻辑不需要关心。
优点:
只需要传入一个正确的参数,就可以获取你所需要的对象,无须知道创建的细节。
缺点:
1、工厂类的职责相对过重,增加新的产品类型的时需要修改工厂类的判断逻辑,违背了开闭原则。
2、不易于扩展过于复杂的产品结构。