美文网首页收藏设计模式
Android设计模式:建造者模式

Android设计模式:建造者模式

作者: 搬码人 | 来源:发表于2021-11-02 21:52 被阅读0次

    背景:小王去商城购买一台组装的台式机。
    执行过程
    1、电脑商城的老板(Director)向小王询问需求。(打游戏、办公or学习)
    2、了解了小王的需求以后,电脑城的老板将小王的需求划分为各个部件(Builder)的需求。(CPU、Memory、HD)
    3、指挥装机人员(ConcreteBuilder)去构建组件
    4、将组件组装成小王需要的电脑(Computer)

    package 设计模式2
    
    /**
     *@Description
     *@Author PC
     *@QQ 1578684787
     */
    
    /**
     * 需要build的对象Computer
     */
    class Computer(){
        //存储组装的电脑
        var parts:MutableList<String> = ArrayList()
        //添加电脑组件
        fun addComputerPart(part:String){
            parts.add(part)
        }
    
        //显示电脑的配置
        fun show(){
            println("Computer的配置:")
            parts.forEach {
                println(it+"")
            }
        }
    }
    /**
     * 抽象的Builder:抽象出定义组装电脑的过程
     */
    
    abstract class Builder{
        //1、组装过程
        //第一步:装CPU
        abstract fun buildCPU()
        //第二步:装内存
        abstract fun buildMemory()
        //第三部:装硬盘
        abstract fun builderHD()
    
        //2、返回组装的结果
        abstract fun create():Computer
    }
    /**
     * 具体的Builder:组装员
     */
    class ConcertBuilder():Builder(){
        //待build的对象
        private val computer = Computer()
        override fun buildCPU() {
            computer.parts.add("Intel-CPU")
        }
    
        override fun buildMemory() {
            computer.parts.add("三星-Memory")
        }
    
        override fun builderHD() {
            computer.parts.add("希捷-硬盘")
        }
    
        override fun create(): Computer {
            return computer
        }
    }
    /**
     * 老板:Director
     */
    
    object Director{
        //让装机员装机
        fun splice(builder: Builder){
            builder.apply {
                this.buildCPU()
                this.buildMemory()
                this.builderHD()
            }
        }
    }
    /**
     * 测试
     */
    fun main() {
        //找到装机人员
        val builder = ConcertBuilder()
        //老板让组装人员装机
        Director.splice(builder)
        //获取组装完毕的电脑
        val computer = builder.create()
        //显示电脑的信息
        computer.show()
    
    }
    

    测试结果


    执行结果

    优点

    • 易于解耦:将产品与产品创建过程进行解耦,可以使用相同的创建过程来得到不同的产品。也就是说细节依赖抽象。
    • 易于精确控制对象的创建:将复杂产品的创建不走分解在不同的方法中,使得创建过程更加清晰。
    • 易于扩展:增加新的具体建造者无需修改原有类库的代码,已与扩展,符合“开闭原则”。

    缺点

    • 建造者模式所创建的产品一般具有较多的共同点,其组成部分相似;如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。
    • 如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。

    应用场景

    Android中的AltertDialog就是使用了建造者模式来构建AlertDialog。

    • 需要生成的产品对象又复杂的内部结构,这些产品对象具备共性;
    • 隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。

    参考文章:
    Android设计模式-建造者模式

    相关文章

      网友评论

        本文标题:Android设计模式:建造者模式

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