设计模式——建造者模式
Posted wqff-biubiu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式——建造者模式相关的知识,希望对你有一定的参考价值。
建造者模式又名生成器模式,可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。
使用场景:类的实例属性过多时,构造方法可能会很多;虽然我们可以用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); } } }
以上是关于设计模式——建造者模式的主要内容,如果未能解决你的问题,请参考以下文章