建造者模式的简单实例

黑马程序员Java设计模式详解,全网最全23种Java设计模式(图解+框架源码分析+实战)_哔哩哔哩_bilibili

建造者抽象类

public abstract class Builder {

    protected Bike bike = new Bike();

    public abstract void buildFrame();

    public abstract void buildSeat();

    public abstract Bike createBike();

    public Bike construct(){
        this.buildFrame();
        this.buildSeat();
        return this.createBike();
    }
}

 具体的建造者类

public class MobileBuilder extends Builder{
    public void buildFrame() {
        bike.setFrame("碳纤维车架");
    }

    public void buildSeat() {
        bike.setSeat("真皮车座");
    }

    public Bike createBike() {
        return bike;
    }
}
public class OfoBuilder extends Builder{
    public void buildFrame() {
        bike.setFrame("铝合金车架");
    }

    public void buildSeat() {
        bike.setSeat("橡胶车座");
    }

    public Bike createBike() {
        return bike;
    }
}

产品类

public class Bike {

    private String frame;
    private String seat;

    public String getFrame() {
        return frame;
    }

    public void setFrame(String frame) {
        this.frame = frame;
    }

    public String getSeat() {
        return seat;
    }

    public void setSeat(String seat) {
        this.seat = seat;
    }
}

客户类(测试类)

public class Cilent {

    @Test
    public void test(){
        Builder builder = new MobileBuilder();
        Bike bike = builder.construct();
        System.out.println(bike.getFrame());
        System.out.println(bike.getSeat());
    }
}

使用构造者模式构造复杂对象

public class Phone {

    private String cpu;
    private String screen;
    private String memory;
    private String mainboard;

    private Phone(PhoneBuilder builder){
        this.cpu = builder.cpu;
        this.screen = builder.screen;
        this.memory = builder.memory;
        this.mainboard = builder.mainboard;
    }

    @Override
    public String toString() {
        return "Phone{" +
                "cpu='" + cpu + '\'' +
                ", screen='" + screen + '\'' +
                ", memory='" + memory + '\'' +
                ", mainboard='" + mainboard + '\'' +
                '}';
    }

    public static final class PhoneBuilder{
        private String cpu;
        private String screen;
        private String memory;
        private String mainboard;

        public PhoneBuilder cpu(String cpu){
            this.cpu = cpu;
            return this;
        }

        public PhoneBuilder screen(String screen){
            this.screen = screen;
            return this;
        }

        public PhoneBuilder memory(String memory){
            this.memory = memory;
            return this;
        }

        public PhoneBuilder mainboard(String mainboard){
            this.mainboard = mainboard;
            return this;
        }

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

    }

}
public class Cilent {

    @Test
    public void testPhone(){
        Phone phone = new Phone.PhoneBuilder().
                cpu("Intel").
                screen("京东方").
                memory("金士顿").
                mainboard("微星").build();
        System.out.println(phone);
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值