美文网首页
建造者模式

建造者模式

作者: 金煜博 | 来源:发表于2021-05-18 22:13 被阅读0次

什么是建造者模式

将复杂的对象结构使用建造者进行分离,在使用指挥者进行重组,生成不同类别的对象信息

经典版造者模式

示例图

图片.png

示例场景

将品牌 价钱属性抽象化,尺寸 数量固定,构建出不同品牌的手机产品

示例代码

1.创建MobilePhone手机产品类

public class MobilePhone {
    private String brand;//手机品牌  可选参数
    private String price;//手机价钱  可选参数
    private String size; //手机尺寸  必填参数
    private String number; //手机数量    必填参数

    public MobilePhone(String size, String number) {
        this.size = size;
        this.number = number;
    }

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

    public void setPrice(String price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "MobilePhone{" +
                "brand='" + brand + '\'' +
                ", price='" + price + '\'' +
                ", size='" + size + '\'' +
                ", number='" + number + '\'' +
                '}';
    }
}

2.创建MobilePhoneBuilder手机构建者类

public abstract class MobilePhoneBuilder {
    public abstract void brand();
    public abstract void price();
    public abstract MobilePhone getMobilePhone();
}

3.创建IPhoneBuilder苹果手机和华为手机具体构建者类

public class IPhoneBuilder extends MobilePhoneBuilder {
    private MobilePhone mobilePhone;


    public IPhoneBuilder(String size,String number) {
        mobilePhone = new MobilePhone(size,number);
    }

    @Override
    public void brand() {
        mobilePhone.setBrand("品牌-iphone11");

    }

    @Override
    public void price() {
        mobilePhone.setPrice("价格-5788");
    }

    @Override
    public MobilePhone getMobilePhone() { 
        return mobilePhone;
    }
}
public class HuaweiBuider extends MobilePhoneBuilder{

    private MobilePhone mobilePhone;

    public HuaweiBuider(String size,String number) {
        mobilePhone = new MobilePhone(size,number);
    }

    @Override
    public void brand() {
        mobilePhone.setBrand("品牌-huaweiP40");
    }

    @Override
    public void price() {
        mobilePhone.setPrice("价钱-4899");
    }

    @Override
    public MobilePhone getMobilePhone() {
        return mobilePhone;
    }
}

4.创建MobliePhoneDirector指挥者类

public class MobliePhoneDirector {
    public void  makePhone(MobilePhoneBuilder mobilePhoneBuilder){
        mobilePhoneBuilder.brand();
        mobilePhoneBuilder.price();
    }
}

5.创建启动类

public class Test {
    public static void main(String[] args) {
        //指挥者
        MobliePhoneDirector mobliePhoneDirector = new MobliePhoneDirector();
        //iphone构建者
        MobilePhoneBuilder iPhoneBuilder = new IPhoneBuilder("1","5.8");
        //调用具体的构建方法
        mobliePhoneDirector.makePhone(iPhoneBuilder);
        //返回iphone手机的构建好的对象信息
        MobilePhone iphone =  iPhoneBuilder.getMobilePhone();
        //输出tostring内容
        String strIphone =  iphone.toString();
        System.out.println(strIphone);

        //huawei构建者
        HuaweiBuider huaweiBuider = new HuaweiBuider("1", "6.8");
        mobliePhoneDirector.makePhone(huaweiBuider);
        MobilePhone huawei = huaweiBuider.getMobilePhone();
        String strHw = huawei.toString();
        System.out.println(strHw);
    }
}

6.运行结果

图片.png

精简版建造者模式(实际开发中常用)

使用静态内部类对原对象进行重组,用于解决类中构造函数参数过多的问题

示例代码

public class Phone {
    private final String brand;//手机品牌  可选参数
    private final String price;//手机价钱  可选参数
    private final String size; //手机尺寸  必填参数
    private final String number; //手机数量    必填参数

    private Phone(Builder builder) {
        this.brand = builder.brand;
        this.price = builder.price;
        this.size = builder.size;
        this.number = builder.number;
    }

    public String getBrand() {
        return brand;
    }

    public String getPrice() {
        return price;
    }

    @Override
    public String toString() {
        return "Phone{" +
                "brand='" + brand + '\'' +
                ", price='" + price + '\'' +
                ", size='" + size + '\'' +
                ", number='" + number + '\'' +
                '}';
    }

    public static class Builder {
        private String brand;//手机品牌  可选参数
        private String price;//手机价钱  可选参数
        private String size; //手机尺寸  必填参数
        private String number; //手机数量    必填参数

        public Builder(String size, String number) {
            this.size = size;
            this.number = number;
        }

        public Builder setBrand(String brand) {
            this.brand = brand;
            return this;

        }

        public Builder setPrice(String price) {
            this.price = price;
            return this;
        }

        public Phone build() {
            return new Phone(this);
        }
    }

    public static void main(String[] args) {
        Phone phone = new Phone.Builder("6.8", "1")
                .setBrand("华为p40")
                .setPrice("6000")
                .build();
        System.out.println(phone.toString());
    }
}

相关文章

  • Builder Pattern in Java

    建造者模式:建造者模式定义建造者模式应用场景实现案例Jdk中的建造者模式建造者模式的优点建造者模式的缺点 建造者模...

  • 设计模式(4) 建造者模式

    什么是建造者模式 经典建造者模式的优缺点 对建造者模式的扩展 什么是建造者模式 建造者模式将一个复杂的对象的构建与...

  • 建造者模式(部件构造)

    目录 建造者模式的理念 从 POJO 到建造者模式的思考 怎么来实现建造者模式 建造者模式在Android源码中的...

  • 【设计模式】之建造者Builder模式

    建造者模式 什么是建造者模式? 建造者模式属于创建型模式的一员,可以控制对象的实例化过程。建造者模式简化了复杂对象...

  • 建造者模式

    一、建造者模式介绍 二、建造者模式代码实例

  • 建造者模式

    建造者模式 首先,建造者模式的封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和...

  • 建造者模式:深入理解建造者模式 ——组装复杂的实例

    目录: 一 建造者模式介绍 1.1 定义 1.2 为什么要用建造者模式(优点)? 1.3 哪些情况不要用建造者模式...

  • 设计模式之建造者模式

    设计模式之建造者模式 Intro 简介 建造者模式: 建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加...

  • 一、设计模式(构建模式)——03建造模式与原型模式

    建造者模式 建造型模式用于创建过程稳定,但配置多变的对象。 建造模式的实现要点: 在建造者模式中,指挥者是直接与客...

  • 创建型模式:建造者模式

    个人公众号原文:创建型模式:建造者模式 五大创建型模式之四:建造者模式。 简介 姓名 :建造者模式 英文名 :Bu...

网友评论

      本文标题:建造者模式

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