美文网首页Java设计模式之道Java设计模式
工厂模式--个体户的进化之路(上)

工厂模式--个体户的进化之路(上)

作者: space0o0 | 来源:发表于2019-06-13 17:40 被阅读2次

大熊家里拆迁了,终于不用当房产中介了,熊爸熊妈拿出一部分钱来让大熊去做生意

大熊决定开一个彩笔厂,生产五颜六色的彩笔给小朋友。ps:大熊是菜逼,所以要从头开始学习。

大熊就想着先建一个简单的工厂呗,做些最基础的彩笔

1·简单工厂模式

先定个接口,声明下彩笔应该是啥样的

interface Pen {
    //定义一堆彩笔的属性,先来个颜色,其他再说。。。
    //颜色
    fun color()
}

然后定义一堆彩笔

//红色的彩笔
class RedPen : Pen {
    override fun color() {
        println("我画红色的线条!")
    }
}
//绿色的彩笔
class GreenPen: Pen {
    override fun color() {
        println("我画绿色的线条!")
    }
}
//蓝色的彩笔
class BluePen : Pen {
    override fun color() {
        println("我画蓝色的线条!")
    }
}

大熊设计好了彩笔后,就需要建造个家庭小作坊来生产了

//彩笔小作坊工厂(简单工厂模式)
class EasyPenFactory {
    companion object {
        @JvmStatic
        fun createPen(color: String): Pen {
            var newPen: Pen = RedPen()//默认生产红色
            when (color) {
                "r" -> newPen = RedPen()
                "g" -> newPen = GreenPen()
                "b" -> newPen = BluePen()
            }
            return newPen
        }
    }
}

接下来就是来啥订单做啥彩笔了

fun main(args: Array<String>) {

    var redPen = EasyPenFactory.createPen("r")
    var greenPen = EasyPenFactory.createPen("g")
    var bluePen = EasyPenFactory.createPen("b")

    println(redPen.color())
    println(greenPen.color())
    println(bluePen.color())
}
---------------------------------------------------
logcat:
我画红色的线条!
我画绿色的线条!
我画蓝色的线条!

从简单工厂模式中可以看出,我们无需暴露出具体的类名(如:RedPen,BluePen,GreenPen...)。只需要告诉调用者指定字符串,就可以得到相应的对象。同时新增其他种类,也都无需修改调用者的代码,只要在factory中增加一个判断就可。

大熊的小作坊生产的彩笔便宜又好用,订单刷刷的进来。可是只生产3种颜色的彩笔完全不能满足市场需求,小朋友们今天突然流行黄色,明天突然流行黑色。大熊每天都要去小作坊升级机器(每天都加判断),太费时费力了。

简单工厂模式之所以简单,就是因为需求的简单。现在需求的增加,每次都得不停的修改一个工厂的代码,这已经违反了“开-闭原则”,这不是一个好的工厂,需要改革。

2·工厂方法模式(factory method pattern)

为了解决不停的修改原工厂代码问题,我们需要引入工厂方法模式(进一步接耦)。

工厂方法模式的理念就是一个生产类对应一个工厂

工厂都是相同类型的工厂,只是以前一个工厂生产n种类型,现在一个工厂只生产一种类型。

大熊的小作坊一条流水线终于变成了独立的n条流水线。

先规定好流水线的生产

interface Factory {
   //造个笔,啥颜色,每个流水线自己定
   fun createPen(): Pen
}

引进设备,建造三条流水线

//红色流水线
class RedPenFactory : Factory {
    //这个流水线造红色彩笔
    override fun createPen(): Pen {
        return RedPen()
    }
}
//绿色流水线
class GreenPenFactory:Factory{
    //这个流水线造绿色彩笔
    override fun createPen(): Pen {
        return GreenPen()
    }
}
//蓝色流水线
class BluePenFactory : Factory {
    //这个流水线造蓝色彩笔
    override fun createPen(): Pen {
        return BluePen()
    }
}

上线测试

fun main(args: Array<String>) {
    //三条流水线准备,来生意了
    var redFactory = RedPenFactory()
    var greenFactory = GreenPenFactory()
    var blueFactory = BluePenFactory()

    //各颜色来一批,三条流水线突突突开始生产
    var redPen = redFactory.createPen()
    var greenPen = greenFactory.createPen()
    var bluePen = blueFactory.createPen()

    //验收,打钱
    redPen.color()
    greenPen.color()
    bluePen.color()
}
-----------------------------------------------
logcat:
我画红色的线条!
我画绿色的线条!
我画蓝色的线条!

如果我们需要一个yellow的彩笔,只需要定义一个yellowPen,再建造一个yellowPenFactory就OK啦,也不会改动其他流水线的代码。

结耦的关键就是1对1的生产关系,而不是1对多的生产关系。

现在大熊的小作坊已经进化成了小工厂,生意蒸蒸日上,钱包越来越鼓~

相关文章

  • 工厂模式--个体户的进化之路(下)

    接上篇:工厂模式--个体户的进化之路(上) 抽象工厂模式 大熊的彩笔工厂生意蒸蒸日上,经过工厂方法模式的改进,现在...

  • 工厂模式--个体户的进化之路(上)

    大熊家里拆迁了,终于不用当房产中介了,熊爸熊妈拿出一部分钱来让大熊去做生意 大熊决定开一个彩笔厂,生产五颜六色的彩...

  • 四 抽象工厂模式

    转自java成神之路 工厂模式的简单回顾 在介绍了简单工厂模式和工厂方法模式之后,相信很多人对工厂模式(如果单独提...

  • 三 工厂方法模式

    转自java成神之路 概念 工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构...

  • 二 简单工厂模式

    转自java成神之路 概念 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Met...

  • iOS开发之设计模式 - 工厂模式

    由《大话设计模式 - 工厂模式》的OC和部分Swift的语言转义 工厂模式 继上一篇《代理模式》 工厂模式, 定义...

  • 简单工厂模式

    对于工厂模式,具体上可以分为三类:简单工厂模式工厂方法模式抽象工厂模式 对于上面的三种工厂模式,从上到下逐步抽象,...

  • 设计模式笔记2--工厂模式

    简单工厂模式 实际上,简单工厂模式并不属于 工厂模式 而是一种代码规范? 没有使用简单工厂模式之前 使用简单工厂...

  • 简单工厂模式

    一、前言 工厂模式是个比较复杂的模式,大体上分为三类:1、简单工厂模式;2、工厂方法模式;3、抽象工厂模式; 二、...

  • js中的开发模式

    js中的开发模式进化史: js中有最初的只能由基本数据类型描述——》单例模式--》工厂模式--》构造函数模式--》...

网友评论

    本文标题:工厂模式--个体户的进化之路(上)

    本文链接:https://www.haomeiwen.com/subject/nqgsfctx.html