设计模式之建造器

        自行车

抽象类构造器和内部类构造器,内部类更加灵活

目录

抽象类构造器

自行车类

建造器

建造操作类

自行车建造

共享单车建造

构造器测试类

内部类构造器

手机类嵌套建造器内部类

内部类构造器测试



抽象类构造器

         类、建造器、摩托车建造器继承建造器、共享单车建造器继承建造器

自行车类

/**
 * @author Dsmash
 */
public class Bike {
    private String seat;
    private String frame;

    public String getSeat() {
        return seat;
    }

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

    public String getFrame() {
        return frame;
    }

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

建造器

/**
 * @author Dsmash
 */
public abstract class Builder {

    //建造自行车
    protected Bike bike=new Bike();

    public abstract void buildFrame();

    public abstract void buildSeat();

    public abstract Bike createBike();
}

建造操作类

/**
 * @author Dsmash
 */
public class Director {
    private Builder builder;

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

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

自行车建造

/**
 * @author Dsmash
 */
public class MobileBuilder extends Builder{
    @Override
    public void buildFrame() {
        bike.setFrame("碳纤维车架");
    }

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

    @Override
    public Bike createBike() {
        return bike;
    }
}

共享单车建造

/**
 * @author Dsmash
 */
public class OfoBuilder extends Builder{
    @Override
    public void buildFrame() {
        bike.setFrame("铝合金车架");
    }

    @Override
    public void buildSeat() {
        bike.setSeat("塑胶车座");
    }

    @Override
    public Bike createBike() {
        return bike;
    }
}

构造器测试类

 @Test
    public void testBuilder1(){
        Builder builder=new OfoBuilder();
        Director director=new Director(builder);
        Bike construct = director.construct();
        System.out.println(construct.getFrame());
        System.out.println(construct.getSeat());
    }

内部类构造器

        建造一部手机组件有 cpu 、screen、 memory

手机类嵌套建造器内部类

public class Phone {
    private String cpu;
    private String screen;
    private String memory;
    private Phone(Builder builder){
        this.cpu= builder.cpu;
        this.memory= builder.memory;
        this.screen= builder.screen;
    }
    public static final class Builder{
        private String cpu;
        private String screen;
        private String memory;

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

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

        public Builder memory(String memory) {
            this.memory = memory;
            return this;
        }
        public Phone build(){
            return new Phone(this);
        }
    }

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

内部类构造器测试

  @Test
    public void testPhone(){
        Phone build = new Phone.Builder()
                .cpu("天机")
                .memory("金士顿内存")
                .screen("三星屏幕")
                .build();
        System.out.println(build);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值