您的位置:首页 > 编程语言 > Java开发

java 建造者模式

2016-04-30 23:50 471 查看

建造者模式(Bulider)

工厂模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象(指某个类具有不同的属性),讲一个复杂的对象与他的表示分离,使得同样的构件过程可以创建不同的表示。

适用性

1. 当创建一个复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

2. 当构造过程必须允许被构造的对象有不同的表示时。

参与者:

* Builder

为创建一个Product对象的各个部件制定抽象接口

* ConcreteBuilder

事项Builder的接口一构造和装配该产品的各个部件

定义并明确它所创建的表示

提供一个检索产品的接口

* Drector

构造一个使用Builder接口的对象

* Product

表示被构造的浮躁对象,ConcreteBuilder创建该产品的内部表示并定义它的装配过程

包含定义组成部件的类,包括将这些部件装配成最终产品的接口

目的是将很多功能集成到一个类里,这个类可以创造出复杂的东西,而且对建造的对象来说,可以很容易增加功能(个人理解:弱耦合)

使用起来在java中,如果一个对象有多个参数,重叠构造器(即重载多个构造器通过不同的参数列表),但是如果参数很长,会很难维护。

所以可以像这样做:

public class NutritionFacts{

private final int servingSize;
private final int servings;
private final int calories;
private final int fat;
private final int sodium;  //Na
private final int carbohydrate;

//nested builder
public static class Builder{
private final int servingSize;
private final int servings;
public Builder(int servingSize, int servings) {
this.servingSize = servingSize;
this.servings = servings;
}

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

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

public Builder carbohydrate(int val) {
carbohydrate = val;
return this;
}
public Builder sodium(int val){
sodium = val;
return this;
}
public NutritionFacts build(){
return new NutritionFacts(this);
}
}
private NutritionFacts(Builder builder){
servingSize = builder.servingSize;
servings = builder.servings;
calories = builder.calories;
fat = builder.fat;
sodium = builder.sodium;
carbohydrate = builder.carbohydrate;
}

@Override
public String toString(){
return "NutrionFacts[servingSize:" + servingSize
+ ",servings:" + servings + ",fat:" + fat
+ ",calories:" + calories + ",sodium:"
+sodium + ",carbohydrate:" + carbohydrate + "]";
}

public static void main(Stirng args[]){
NutritionFacts nf = new NutritionFacts.Builder(5,10).calories(1).fat(2).carbohydrate(3).build();
System.out.println(nf);
}
}


有关Bulider模式,就先学到这里,设计模式主要是解决一些典型的问题,在开发中要有意识的去使用,熟能生巧,多用多想,融会贯通才是王道。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Builder模式