设计模式之建造者模式

2023-07-10  本文已影响0人  Tinyspot

1. 建造者模式(Builder)

2. 应用

2.1 例程

@Test
public void testBuilder() {
    IBuilder builder = new ConcreteBuilder();
    OrderInfo orderInfo = builder.builder()
            .buildOrder("order")
            .buildOrderItem("orderItem")
            .buildFeature("feature")
            .build();
}
public interface IBuilder {
    IBuilder builder();
    IBuilder buildOrder(String order);
    IBuilder buildOrderItem(String orderItem);
    IBuilder buildFeature(String feature);
    OrderInfo build();
}

public class ConcreteBuilder implements IBuilder {
    private OrderInfo orderInfo;

    @Override
    public IBuilder builder() {
        orderInfo = new OrderInfo();
        return this;
    }

    @Override
    public IBuilder buildOrder(String order) {
        orderInfo.setOrder(order);
        return this;
    }

    @Override
    public IBuilder buildFeature(String feature) {
        orderInfo.setFeature(feature);
        return this;
    }

    @Override
    public IBuilder buildOrderItem(String orderItem) {
        orderInfo.setOrderItem(orderItem);
        return this;
    }

    @Override
    public OrderInfo build() {
        return orderInfo;
    }
}

2.2 普通类构建

@Test
public void testBuilder() {
    // 链式写法
    User user = new UserBuilder().builder()
            .addName("Tinyspot")
            .addAge(20)
            .build();
}
public class UserBuilder {
    private User user;

    public User build() {
        return user;
    }

    public UserBuilder builder() {
        user = new User();
        return this;
    }

    public UserBuilder addName(String name) {
        user.setName(name);
        return this;
    }
    
    public UserBuilder addAge(Integer age) {
        user.setAge(age);
        return this;
    }
    
    // ...
}

思考:
此处return this的应用

2.3 静态内部类方式

@Test
public void testBuilder() {
    User user = new User.Builder().builder()
            .addName("Tinyspot")
            .addAge(20)
            .build();
}
@Data
public class User {
    private String name;
    private Integer age;
    private Integer status;
    private Integer salary;
    private Long total;

    // 静态内部类方式
    public static class Builder {
        private User user;

        public User build() {
            return user;
        }

        public Builder builder() {
            user = new User();
            return this;
        }

        public Builder addName(String name) {
            user.setName(name);
            return this;
        }

        public Builder addAge(Integer age) {
            user.setAge(age);
            return this;
        }

        // ...
    }
}
上一篇 下一篇

猜你喜欢

热点阅读