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

工厂方法

定义

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

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

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

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

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

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

UML图

工厂方法模式的结构图

基本实现代码

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

工厂方法的优缺点

  • 优点:工厂方法是简单工厂的进一步抽象和推广,符合开放-封闭原则
  • 不足:需要修改客户端的代码,来决定使用哪个工厂。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值