前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >(Kotlin and Java)设计模式-建造者模式

(Kotlin and Java)设计模式-建造者模式

作者头像
Anymarvel
发布2018-10-22 11:14:19
9030
发布2018-10-22 11:14:19
举报
文章被收录于专栏:Android开发实战Android开发实战

以最简单的module学习设计模式

前言

建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。

何时使用:一些基本部件不会变,而其组合经常变化的时候。

正文

  1. 指挥者(Director)直接和客户(Client)进行需求沟通;
  2. 沟通后指挥者将客户创建产品的需求划分为各个部件的建造请求(Builder);
  3. 将各个部件的建造请求委派到具体的建造者(ConcreteBuilder);
  4. 各个具体建造者负责进行产品部件的构建;
  5. 最终构建成具体产品(Product)。

建造模式很简单,一组装电脑为例,由于电脑元件一般不会发生太大的改变,但电脑组装是一个复杂的过程。 UML图:

1.创建建造请求

代码语言:javascript
复制
abstract class Builder {    //第一步:装CPU
    //声明为抽象方法,具体由子类实现
    abstract fun buildCPU()

    //第二步:装主板
    //声明为抽象方法,具体由子类实现
    abstract fun buildMainboard()

    //第三步:装硬盘
    //声明为抽象方法,具体由子类实现
    abstract fun buildHD()

    //返回产品的方法:获得组装好的电脑
    abstract fun getComputer(): Computer
}

2.将建造请求委派到建造者进行实现

代码语言:javascript
复制
class ConcreteBuilder : Builder() {    //创建产品实例
    private var computer = Computer()    //组装产品
    override fun buildCPU() {
        computer.add("组装CPU")
    }

    override fun buildMainboard() {
        computer.add("组装主板")
    }

    override fun buildHD() {
        computer.add("组装硬盘")
    }    //返回组装成功的电脑    override fun getComputer(): Computer {        return computer    }
}

3.指挥组装元件

代码语言:javascript
复制
class Director {
    //指挥装机人员组装电脑
    fun construct(builder: Builder) {

        builder.buildCPU()
        builder.buildMainboard()
        builder.buildHD()
    }
}

4.定义具体产品类(Product):电脑

代码语言:javascript
复制
class Computer {    //电脑组件的集合
    private val parts = ArrayList<String>()    //用于将组件组装到电脑里
    fun add(part: String) {
        parts.add(part)    }    fun show() {        for (i in parts.indices) {            println("组件" + parts[i] + "装好了")
        }
        println("电脑组装完成,请验收")


    }
}

客户端调用

代码语言:javascript
复制
object BuilderTest {    @JvmStatic
    fun main(args: Array<String>) {        //逛了很久终于发现一家合适的电脑店
        //找到该店的老板和装机人员
        val director = Director()
        val builder = ConcreteBuilder()        //沟通需求后,老板叫装机人员去装电脑
        director.construct(builder)        //装完后,组装人员搬来组装好的电脑
        val computer = builder.getComputer()        //组装人员展示电脑给小成看
        computer.show()

    }
}

结果输出

每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象。 设计模式持续更新中

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android历练记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 正文
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档