创建者模式(Builder Pattern)

建造者模式(builder pattern)定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示个人理解:建造者模式就是将复杂的对象创建细节封装起来,客户端在使用的时候更加简洁明了。提高可读性。对于步骤相同但是内容不同情况,创建一个builder就可以完成简单的扩展.参与者抽象创建者(Builder)具体建造者(ConcreteBuilder)指挥者(Director)具体产品(Product)代码案例产品类 productpublic cl
摘要由CSDN通过智能技术生成
建造者模式(builder pattern)

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

个人理解

  1. 建造者模式就是将复杂的对象创建细节封装起来,客户端在使用的时候更加简洁明了。提高可读性。

  2. 对于步骤相同但是内容不同情况,创建一个builder就可以完成简单的扩展.

参与者
  • 抽象创建者(Builder)
  • 具体建造者(ConcreteBuilder)
  • 指挥者(Director)
  • 具体产品(Product)
代码案例

产品类 product

public class Product {
protected List<String> parts = new ArrayList<String>();

public void add(String part){
    parts.add(part);
}

public void show(){
    System.out.println("产品部件信息:");
    for (String part : parts) {
        System.out.println(part + "\t");
    }
}

builder接口/抽象类

public interface Builder {
    void buildCPU();
    void  buildMemory();
    void buildDisplayCart();
    Product getFinalResult();
}

productBuilder产品的创建者

public class AcerBuilder implements Builder{
    private Product product = new Product();

    @Override
    public void buildCPU() {
     product.add("CPU:Intel 酷睿i3");
    }

    @Override
    public void buildMemory() {
        product.add("内存:4GB DDR3");
    }

    @Override
    public void buildDisplayCart() {
        product.add("显卡:NAVDIA ");
    }

    @Override
    public Product getFinalResult() {
        return product;
    }
}

direcotr构建者

public class Director {

    private Builder builder;

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

    public void construct(){
        builder.buildCPU();
        builder.buildDisplayCart();
        builder.buildMemory();
    }
}
UML

具体产品。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MSgTL25D-1642427667345)(D:\Document\note\设计模式\picture\builder2.png)]

抽象产品
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-To98v6xn-1642427667346)(D:\Document\note\设计模式\picture\Builder.png)]

链式写法

当一个类的构造函数参数超过4个,而且这些参数有些是可选的时,可以使用建造者模式

public class ChainBuilder {
    private String cpu;//必须
    private String ram;//必须
    private int usbCount;//可选
    private String keyboard;//可选
    private String display;//可选

    public static class  Builder{
        private String cpu;//必须
        private String ram;//必须
        private int usbCount =2;//可选
        private String keyboard="罗技";//可选
        private String display="华硕";//可选
        public Builder(String cpu,String ram){
            this.cpu = cpu;
            this.ram = ram;
        }
        public Builder usbCount(int num){
            this.usbCount = num;
            return this;
        }
        public Builder keyboard(String keyboard){
            this.keyboard = keyboard;
            return this;
        }
        public Builder display(String display){
            this.display = display;
            return this;
        }

        private ChainBuilder build( ){
            return new ChainBuilder(this);
        }
    }
    public ChainBuilder(Builder builder){
        this.cpu=builder.cpu;
        this.ram=builder.ram;
        this.usbCount=builder.usbCount;
        this.display=builder.display;
        this.keyboard=builder.keyboard;
    }

    public static void main(String[] args) {
        ChainBuilder build = new ChainBuilder.Builder("Intel", "ddr3").usbCount(12).build();
        System.out.println(build.toString());
    }

    @Override
    public String toString() {
        return "ChainBuilder{" +
                "cpu='" + cpu + '\'' +
                ", ram='" + ram + '\'' +
                ", usbCount=" + usbCount +
                ", keyboard='" + keyboard + '\'' +
                ", display='" + display + '\'' +
                '}';
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值