设计模式 - 建造者模式 Java&Kotlin

同算法与数据结构一样,设计模式同样是作为一个优秀程序员必须熟练掌握与应用的基本功,在阅读源码或者优秀的开源项目的同时,不难发现各种设计模式的灵活运用,叹为观止。

接下来一系列博客,将和大家一起分享这些常用的设计模式。

观察者模式

装饰者模式

工厂模式

单例模式

建造者模式

本篇博客一起来看看建造者模式,建造者模式可以屏蔽产品的具体创建细节,并且建造者相互独立易于扩展,接下来通过一个简单的例子看看建造者模式。

这里我们来创建华为Mate20

首先定义产品类

public class Phone {
    private String os;
    private String brand;
    private String processor;

    public void setOs(String os) {
        this.os = os;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public void setProcessor(String processor) {
        this.processor = processor;
    }

    @Override
    public String toString() {
        return "os : " + os + " brand : " + brand + " processor : " + processor;
    }
}

然后抽象出产品的创建方法

public abstract class PhoneBuilder {
    public abstract void buildOs(String os);
    public abstract void buildBrand(String brand);
    public abstract void buildProcessor(String processor);
    public abstract Phone create();
}

在用具体手机产品去继承抽象类

public class HuaWeiMate20Builder extends PhoneBuilder {

    private Phone phone = new Phone();

    @Override
    public void buildOs(String os) {
        phone.setOs(os);
    }

    @Override
    public void buildBrand(String brand) {
        phone.setBrand(brand);
    }

    @Override
    public void buildProcessor(String processor) {
        phone.setProcessor(processor);
    }

    @Override
    public Phone create() {
        return phone;
    }
}

最后一步创建导演类,用来控制创建的过程

public class Director {
    PhoneBuilder builder;

    public Director(PhoneBuilder builder) {
        this.builder = builder;
    }

    public Phone createPhone(String os, String brand, String processor) {
        builder.buildOs(os);
        builder.buildBrand(brand);
        builder.buildProcessor(processor);
        return builder.create();
    }
}

至此就完成了简单的建造者模式,接下来测试一下吧

public class CreateHuaWeiMate20 {
    public static void main(String[] args) {
        PhoneBuilder builder = new HuaWeiMate20Builder();
        Director director = new Director(builder);
        Phone phone = director.createPhone("Android", "HuaWei", "HaiSi");
        System.out.println(phone.toString());
    }
}

以下是Kotlin代码

class Phone {
    var os : String = ""
    var brand : String = ""
    var processor : String = ""

    override fun toString(): String {
        return "os : $os brand : $brand processor : $processor"
    }
}

abstract class PhoneBuilder {
    abstract fun setOs(os :String)
    abstract fun setBrand(brand : String)
    abstract fun setProcessor(processor : String)
    abstract fun create() : Phone
}

class HuaWeiMate20PhoneBuilder : PhoneBuilder() {

    var phone : Phone = Phone()

    override fun setOs(os: String) {
        phone.os = os
    }

    override fun setBrand(brand: String) {
        phone.brand = brand
    }

    override fun setProcessor(processor: String) {
        phone.processor = processor
    }

    override fun create(): Phone {
        return phone
    }
}

class Director(internal var builder: PhoneBuilder) {

    fun createPhone(os: String, brand: String, processor: String): Phone {
        builder.setOs(os)
        builder.setBrand(brand)
        builder.setProcessor(processor)
        return builder.create()
    }
}

fun main(args: Array<String>) {
    val builder = HuaWeiMate20PhoneBuilder()
    val director = Director(builder)
    val phone = director.createPhone("Android", "HuaWei", "HaiSi")
    println(phone.toString())
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值