前言
说完了建造者模式,那就该提提工厂模式了
工厂模式与建造者模式的差别
因为这2个还是挺相似的,都是生成一个我们想要的东西,所以还是得说清楚的:
工厂模式:直接生成一个可用的产品
// 如bitmapFactory
val bitmap = BitmapFactory.decodeFile(filePath)b
建造者模式:配置相关参数生成一个我们想要的产品
//如AlertDialog
val builder = AlertDialog.Builder(this)
val dialog = builder.setTitle(xxxx)
.setIcon(xxxx)
.setIcon(XXX)
.setXXX(xxx)
.create()
.show()
正文
对于工厂模式来说,工厂模式就是直接生成我们想要的东西
先来个简单的吧
abstract class Fruits {
abstract fun eat()
}
class Apple : Fruits(){
override fun eat() {
}
}
class Banana : Fruits(){
override fun eat() {
}
}
class FruitsFactory{
companion object {
val APPLE = "apple"
val BANANA = "banana"
}
fun createFruits(type: String): Fruits?{
when(type){
APPLE -> return Apple()
BANANA -> return Banana()
}
return null
}
}
//使用
val fruitsFactory = FruitsFactory()
val apple = fruitsFactory.createFruits(FruitsFactory.APPLE)
apple?.eat()
除了简单工厂之外,还有个抽象工厂
就是你的工厂多了几个接口实现
abstract class Fruits {
abstract fun eat()
}
class Apple : Fruits(){
override fun eat() {
}
}
class Banana : Fruits(){
override fun eat() {
}
}
abstract class Factory{
abstract fun createApple(): Fruits
abstract fun createBanana(): Fruits
}
class SimpleFruitsFactory : Factory(){
override fun createApple(): Fruits {
return Apple()
}
override fun createBanana(): Fruits {
return Banana()
}
}
class GifeFruitsFactory : Factory(){
override fun createApple(): Fruits {
return Apple()
}
override fun createBanana(): Fruits {
return Banana()
}
}
//使用
val simpleFruitsFactory = SimpleFruitsFactory()
val simpleApple = simpleFruitsFactory.createApple()
val gifeFruitsFactory = GifeFruitsFactory()
val giftBanana = gifeFruitsFactory.createBanana()
总结
因为kotlin声明变量/常量是方式是var/val
所以工厂模式的使用上没有java那般直观
不过只要知道工程模式的写法是不需要配置参数直接生成产品就好了
网友评论