设计模式-创建型-建造者模式

建造者模式

定义

将一个复杂的对象的构建与它的表示分离,是的同样的构建过程可以创建不同的表示。

场景

初始化一个对象特别复杂,如使用多个构造方法,或者说有很多参数,并且都有默认值时。

一般4个以上参数,考虑使用建造者模式创建对象。

为什么使用建造者

当你要调用一个类的构造函数时,你首先要决定使用哪一个,然后里面又是一堆参数,如果这些参数的类型很多又都一样,你还要搞清楚这些参数的含义,很容易就传混了

UML图

在这里插入图片描述

实现
public abstract class Computer {
    protected String name;
    protected String mouse;
    protected String keyboard;

    public Computer() {
    }

    public abstract void setName() ;


    public void setMouse(String mouse) {
        this.mouse = mouse;
    }


    public void setKeyboard(String keyboard) {
        this.keyboard = keyboard;
    }

    @Override
    public String toString() {
        return "Computer{" +
                "name='" + name + '\'' +
                ", mouse='" + mouse + '\'' +
                ", keyboard='" + keyboard + '\'' +
                '}';
    }
}
public class MacComputer extends Computer {
    @Override
    public void setName() {
        name = "Mac";

    }
}
public abstract class Builder {
    abstract void buildMouse(String mouse);
    abstract void buildKeyboard(String keyboard);
    abstract void buildName();
    abstract Computer build();
}

public  class MacBuilder extends Builder {
    private MacComputer macComputer = new MacComputer();


    @Override
    void buildMouse(String mouse) {
        macComputer.setMouse(mouse);
    }

    @Override
    void buildKeyboard(String keyboard) {
        macComputer.setKeyboard(keyboard);
    }

    @Override
    void buildName() {
        macComputer.setName();
    }

    @Override
    public Computer build() {
        return macComputer;
    }

    @Override
    public String toString() {
        return "MacBuilder{" +
                "macComputer=" + macComputer +
                '}';
    }
}

public class Directer {
    Builder builder ;

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

    public void construct(String mouse, String keyboard){
        builder.buildName();
        builder.buildMouse(mouse);
        builder.buildKeyboard(keyboard);
    }

    public static void main(String[] args) {
        MacBuilder macBuilder = new MacBuilder();
        new Directer(macBuilder).construct("Logic","Aoc");
        System.out.println(macBuilder.build().toString());

    }
}

总结

为了灵活构造复杂对象,该对象会有多个成员变量,在外部调用的时候,不需要或者不方便一次性创建出所有的成员变量,在这种情况下,使用多个构造方法去构建对象,很难维护,这时候Builder设计模式解决这个问题,进行buid()方法中创建对象,并且将builder传入,该builder中,维护了传入对象的成员变量。

文章来源

https://www.jianshu.com/p/f958ba891467

建造者简单实现

https://zhuanlan.zhihu.com/p/58093669

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值