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

大话设计模式java版--建造者模式

2016-05-11 09:47 465 查看
建造者模式用来解决的问题是建造的将流程与细节分开来处理的。例如:楼房的建造流程是固定的,但是具体的建造是不一定的。还有汉堡的制造流程是固定的,但是具体的用的材料和细节是不一定的,这时候建造者模式就是为了解决这个问题出现的。

建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。引用GOF。



结合《大话设计模式》看看。
问题:制造一个人,头,双手,双脚。
分析:人的头,双手和双脚是建造一个人的工序,但是有可能因为每个人的头不同而不同,就是说细节是变化的,而制造方法是一样的。

而最终的交付结果当然是针对人来设计的。因此先有类peoduct。
Product.java
package com.jing.builder;

import java.util.ArrayList;
import java.util.List;

public class Product {
private List<String> productParts = new ArrayList<String>();
public void add(String part){
productParts.add(part);
}

public void show(){
for(String part:productParts){
System.out.println(part);
}
}
}

在这个Product类中我们附加上了添加部件的函数add();

接着根据面向接口编程,于是有了
PersonBuilder.java
package com.jing.builder;

public interface PersonBuilder {
public void builderHead();
public void builderLHand();
public void builderRHand();
public void builderLfOOT();
public void builderRFoot();

public Product getResult();
}


实现接口,肥的建造类
PersonFatConcreteBuilder.java
package com.jing.builder;

public class PersonFatConcreteBuilder implements PersonBuilder{

//ConcreteBuilder 是对product进行元件部分的建造
private Product product = new Product();;
@Override
public void builderHead() {
product.add("fat head");
}

@Override
public void builderLHand() {
product.add("fat Lhand");
}

@Override
public void builderRHand() {
product.add("fatRhand");
}

@Override
public void builderLfOOT() {
product.add("fatLfoot");
}

@Override
public void builderRFoot() {
product.add("fat Rfoot");
}

@Override
public Product getResult() {
return product;
}

}


实现接口,瘦的建造类
package com.jing.builder;

public class PersonThinConcreteBuilder implements PersonBuilder{

//ConcreteBuilder 是对product进行元件部分的建造
private Product product = new Product();
@Override
public void builderHead() {
product.add("thin head");
}

@Override
public void builderLHand() {
product.add("thin hand");
}

@Over
4000
ride
public void builderRHand() {
product.add("thin hand");
}

@Override
public void builderLfOOT() {
product.add("thin foot");
}

@Override
public void builderRFoot() {
product.add("thin foot");
}

@Override
public Product getResult() {
return product;
}

}


零件都有了。这时我们需要指挥官指挥流程!!!!!注意:指挥官是只负责指挥!指挥官是只负责指挥!指挥官是只负责指挥!重要的事情讲三遍!!
package com.jing.builder;

public class PersonDirector {

//具体的产品生产交给Director来处理指挥 返回值是空 指挥官仅仅作为指挥 不负责制造
public void constructNormalPerson(PersonBuilder builder){
builder.builderHead();
builder.builderLfOOT();
builder.builderLHand();
builder.builderRFoot();
builder.builderRHand();
}
}


实现的细节都再具体的builder里面。
package com.jing.builder;

public class Main {
public static void main(String[] args) {
PersonDirector director = new PersonDirector();//指挥官
PersonBuilder fatBuilder = new PersonFatConcreteBuilder();//制造厂
PersonBuilder thinBuilder = new PersonThinConcreteBuilder();//制造厂

director.constructNormalPerson(fatBuilder);// 指挥官指挥fatBuilder制造正常人类
Product fatPerson = fatBuilder.getResult();//获取产品
fatPerson.show();

director.constructNormalPerson(thinBuilder);
Product thinPerson = thinBuilder.getResult();
thinPerson.show();
}
}


建造者模式就是这样子了。。。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: