8.工厂方法模式(大话设计模式kotlin版)

工厂方法

定义

工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

简单工厂与工厂方法的区别

  • 简单工厂:提供一个工厂生产不同的物品;(一个工厂生产多种产品

  • 工厂方法:为每种不同的物品都提供一个工厂进行生产;(一个工厂生产一样产品

  • 当要在简单工厂方法里增加一种物品时,需要在它所提供的工厂里进行代码修改把新加的物品加入工厂中;而使用工厂方法,就可以单独为这种物品新建一个工厂,由客户端直接使用该工厂生产该物品即可,符合开放-封闭原则

  • 两者都是集中封装了对象的创建,使得更换对象时,不需要做大的改动就可以实现,降低客户端与产品对象的耦合。

UML图

8.工厂方法模式(大话设计模式kotlin版)_第1张图片

基本实现代码

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()
        }
    }
}

工厂方法的优缺点

  • 优点:工厂方法是简单工厂的进一步抽象和推广,符合开放-封闭原则
  • 不足:需要修改客户端的代码,来决定使用哪个工厂。

你可能感兴趣的:(设计模式,设计模式)