effective java 第三版 builder建造者 P12

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/absolute_chen/article/details/100879280
package Effective02.P12;

import java.util.EnumSet;
import java.util.Objects;
import java.util.Set;

public abstract class Pizza {
    public enum Topping{
        HAM, MUSHROOM, ONION,PEPPER, SAUSAGE
    }
    final Set<Topping> toppings;

    Pizza (Builder<?> builder){
        toppings =builder.toppings.clone();
    }

    abstract static class Builder<T extends Builder<T>>{
        EnumSet<Topping> toppings =EnumSet.noneOf(Topping.class); //用于创建elementType类型的空集
        public T addTopping(Topping topping){
            //Objects.requireNonNull()如果当前对象为空 会抛出一个空指针异常
            //否则就会返回当前对象
            toppings.add(Objects.requireNonNull(topping));
            return self();
        }
        abstract NyPizza build();
        protected abstract T self();
    }

    @Override
    public String toString() {
        return super.toString();
    }
}
package Effective02.P12;

import java.util.Objects;

public class NyPizza extends Pizza{
    public enum Size {SMALL, MEDIUM, LARGE }
    private final Size size;

    private NyPizza (Builder builder){
        super(builder);
        size =builder.size;
    }

    public static class Builder extends Pizza.Builder<Builder>{
        private final Size size;
        public Builder(Size size){
            this.size = Objects.requireNonNull(size);
        }
        public NyPizza build(){
            return new NyPizza(this);
        }
        protected Builder self(){
            return this;
        }
    }

    @Override
    public String toString() {
        System.out.println("size: "+ size);
        return super.toString();
    }
}
package Effective02.P12;

public class MainClass {
    public static void main(String[] args) {
        NyPizza pizza = new NyPizza.Builder( NyPizza.Size.SMALL )
                .addTopping( Pizza.Topping.SAUSAGE ).addTopping( Pizza.Topping.ONION ).build();

        System.out.println(pizza.toString());
    }
}

猜你喜欢

转载自blog.csdn.net/absolute_chen/article/details/100879280
今日推荐