互动创意网站,网站管理系统排行榜,asp网站开发软件,免费行情网站app下载大全问题#xff1a;建造者模式什么时候使用#xff1f;
建造者模式在现实世界里面的使用例子是什么#xff1f;它有啥用呢#xff1f;为啥不直接用工厂模式
回答一
下面是使用这个模式的一些理由和Java的样例代码#xff0c;但是它是由设计模式的4个人讨论出来的建造者模式…问题建造者模式什么时候使用
建造者模式在现实世界里面的使用例子是什么它有啥用呢为啥不直接用工厂模式
回答一
下面是使用这个模式的一些理由和Java的样例代码但是它是由设计模式的4个人讨论出来的建造者模式实现的。这些原理你可以在Java里面使用也适用于其他编程语言
正如Joshua Bloch在第二版的Effective Java说过的那样
建造者模式是一个很好的选择当设计一个类这个类的构造方法或者静态工厂有贼多的参数的时候
我们曾经都遇到一个类就是带有一堆构造器每个都参数列表都只是加一个参数
Pizza(int size) { ... }
Pizza(int size, boolean cheese) { ... }
Pizza(int size, boolean cheese, boolean pepperoni) { ... }
Pizza(int size, boolean cheese, boolean pepperoni, boolean bacon) { ... }这叫做重叠构造器模式。这种模式的问题就是一旦你有45个参数你就很难记住参数的顺序和这种情况下应该用哪个构造器了
一个可以代替重叠构造器模式的就是Javabean模式了你可以调用一个带强制参数的构造器任何再调用其他的setter方法。
Pizza pizza new Pizza(12);
pizza.setCheese(true);
pizza.setPepperoni(true);
pizza.setBacon(true);这里的问题就是这个对象经过几次的调用才被创建出来在构造的过程中可能出现不一致的现象。这需要一些其他的工作去确保线程安全。
更好的选择当然是用建造者模式啦
public class Pizza {private int size;private boolean cheese;private boolean pepperoni;private boolean bacon;public static class Builder {//requiredprivate final int size;//optionalprivate boolean cheese false;private boolean pepperoni false;private boolean bacon false;public Builder(int size) {this.size size;}public Builder cheese(boolean value) {cheese value;return this;}public Builder pepperoni(boolean value) {pepperoni value;return this;}public Builder bacon(boolean value) {bacon value;return this;}public Pizza build() {return new Pizza(this);}}private Pizza(Builder builder) {size builder.size;cheese builder.cheese;pepperoni builder.pepperoni;bacon builder.bacon;}
}Pizza是不变的所有参数的值也是在一个位置那是因为Builder的setter方法放回一个builder对象可以它们可以向下面那样连起来
Pizza pizza new Pizza.Builder(12).cheese(true).pepperoni(true).bacon(true).build();文章翻译自Stack Overflowhttps://stackoverflow.com/questions/328496/when-would-you-use-the-builder-pattern