定义
定义一个创建对象的接口,具体实例化成那个对象让子类自己去决定。
使用场景
使用场景非常广泛,可以说只要复杂的对象都可以使用。是不是感觉自己要爽一下。
角色包含
抽象工厂类:略掉的时候具体工厂类方法变为static,这是称为静态工厂模式。
具体工厂类:具体建造各式对象的执行类。
抽象产品类:产品类的抽象,子类体量较少且固定时可省略。
产品类:具体要生产的对象类
老规矩,来点代码看看。
假如我们想要开一家早餐店,做各式各样的早餐(偷懒了,只是为了方便)。我们现在暂时卖面条、煎饼。
抽象产品类
abstract class Food {
abstract fun creatFood()
}
产品类
class Noodle : Food() {
override fun creatFood() {
Log.e("liulu","noodle")
}
}
public class Pancake extends Food {
@Override
public void creatFood() {
Log.e("liulu","pancake")
}
}
抽象工厂类
abstract class Factory {
abstract fun creatFood(): Food
}
工厂类
class NoodleFactory : Factory() {
override fun creatFood(): Food {
return Noodle()
}
}
class PancakeFactory : Factory() {
override fun creatFood(): Food {
return Pancake()
}
}
是不是感觉有点麻烦,是的,工厂类可以利用反射节省一步
// 抽象类
abstract class FactoryNew {
abstract fun <T : Food> createFood(cla: Class<T>): T?
}
// 具体实现类
class FoodFactory : FactoryNew() {
override fun <T : Food> createFood(cla: Class<T>): T? {
try {
return Class.forName(cla.name).newInstance() as T
} catch (e: Exception) {
return null
}
}
}
好了,大功告成,我们来验证下