Design Pattern

創建型模式-Factory Method Pattern(工廠方法模式)

Factory Method Pattern(工廠方法模式)

介紹

將大工廠裡的相同類型拆分出來變一塊一塊的小工廠
EX:
水果工廠 > 香蕉工廠、蘋果工廠、橘子工廠
物流工廠 > 水運工廠、陸運工廠、空運工廠

好處

工廠方法把創建與使用的程式碼分離,要擴展時就不會影響其他的程式碼

程式範例

Factory Method Pattern

創建工廠接口
interface FruitFactory {
    fun getFruit(): Fruit
}
創建產品接口
interface Fruit {
    fun eat()
}
實現香蕉產品
class Banana : Fruit {
    override fun eat() {
        println("吃香蕉")
    }
}
實現蘋果產品
class Apple : Fruit{
    override fun eat() {
        println("吃蘋果")
    }
}
實現橘子產品
class Orange : Fruit {
    override fun eat() {
        println("吃橘子")
    }
}
實現香蕉工廠(取得香蕉)
class BananaFactory : FruitFactory {
    override fun getFruit(): Fruit {
        return Banana()
    }
}
實現蘋果工廠(取得蘋果)
class AppleFactory : FruitFactory {
    override fun getFruit(): Fruit {
        return Apple()
    }
}
實現橘子工廠(取得橘子)
class OrangeFactory : FruitFactory {
    override fun getFruit(): Fruit {
        return Orange()
    }
}

執行

fun main() {
    FactoryTest().flyGetApple()
    FactoryTest().flyGetBanana()
    FactoryTest().flyGetOrange()
}

class FactoryTest {

    private lateinit var fruitFactory: FruitFactory

    fun flyGetBanana() {
        fruitFactory = BananaFactory()
        fruitFactory.getFruit().eat()
    }

    fun flyGetApple() {
        fruitFactory = AppleFactory()
        fruitFactory.getFruit().eat()
    }

    fun flyGetOrange() {
        fruitFactory = OrangeFactory()
        fruitFactory.getFruit().eat()
    }
}

發表迴響