码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式——建造者模式

时间:2020-04-03 16:40:00      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:fat   设计   cal   str   抽象类   场景   odi   ret   poi   

建造者模式又名生成器模式,可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。

使用场景:类的实例属性过多时,构造方法可能会很多;虽然我们可以用JavaBean的setter方法进行设置,但生成的对象状态可能不一致,导致对象不可用。最常见的:只赋值一部分属性,就拿去使用了,会导致NullPointerException异常。

这个时候就可以使用建造者模式,这也是《Effective Java》中推荐的。

  • 可以极大的简化代码,不用创建多个构造器。
  • 并且还能保证对象的一致性,在最后调用build()方法时,对象才是可用的。

建造者模式的常用实现方式:

一、内部静态类

 

public class NutritionFacts {
    private final int servingSize;
    private final int servings;
    private final int calories;
    private final int fat;
    private final int sodium;
    private final int carbohydrate;

    private NutritionFacts(Builder builder){
        this.servingSize = builder.servingSize;
        this.servings = builder.servings;
        this.calories = builder.calories;
        this.fat = builder.fat;
        this.sodium = builder.sodium;
        this.carbohydrate = builder.carbohydrate;
    }

    public static class Builder{
        private final int servingSize;
        private final int servings;
        private int calories;
        private int fat;
        private int sodium;
        private int carbohydrate;

        public Builder(int servingSize, int servings){
            this.servingSize = servingSize;
            this.servings = servings;
        }

        public Builder calories(int calories){
            this.calories = calories;
            return this;
        }

        public Builder fat(int fat){
            this.fat = fat;
            return this;
        }

        public Builder sodium(int sodium){
            this.sodium = sodium;
            return this;
        }

        public Builder carbohydrate(int carbohydrate){
            this.carbohydrate = carbohydrate;
            return this;
        }

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

 

 

 

 

设计模式——建造者模式

标签:fat   设计   cal   str   抽象类   场景   odi   ret   poi   

原文地址:https://www.cnblogs.com/wqff-biubiu/p/12627062.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!