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

    在很多业务流程中,某一项需求是需要比如 A与B的类共同组成的,或者是生成很多复杂的算法的时候。比如

一个产品类product,需要多个部件组成。

    

package builder;

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

public class Product {
	List<String> parts = new ArrayList<String>();
	public void Add(String part){//添加产品部件
		parts.add(part);
	}
	public void Show(){
		System.out.println("\n 产品 创建----");
		for (String str : parts) {//列举所有的产品部件
			System.out.println(str);
		}
	}
}

Builder类--抽象建造者类,确定产品由两个部件PartA 和PartB组成,并声明一个获得产品结果的方法GetResult

package builder;

public abstract class Builder {

	public abstract void BuildPartA();
	public abstract void BuildPartB();
	public abstract Product getResult(); 
	
} 

再创建2个具体构建类,用于生产产品的部件

package builder;

public class ConcreteBuilder1 extends Builder {

	private Product product = new Product();
	@Override
	public void BuildPartA() {
		product.Add("部件A");

	}

	@Override
	public void BuildPartB() {
		product.Add("部件B");
	}

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

}
package builder;

public class ConcreteBuilder2 extends Builder {

	private Product product = new Product();
	@Override
	public void BuildPartA() {
		// TODO Auto-generated method stub
		product.Add("部件X");
	}

	@Override
	public void BuildPartB() {
		// TODO Auto-generated method stub
		product.Add("部件Y");
	}

	@Override
	public Product getResult() {
		// TODO Auto-generated method stub
		return product;
	}

}

然后是指挥类,用于创建部件

public class Director {
	public void Construct(Builder builder){
		builder.BuildPartA();
		builder.BuildPartB();
	}

然后是客户端代码,客户不用知道具体的产品生产过程,用来创建产品

	public static void main(String[] args) {
		Director director = new Director();
		Builder b1 = new ConcreteBuilder1();
		Builder b2 = new ConcreteBuilder2();
		
		director.Construct(b1);
		Product p1 = b1.getResult();
		p1.Show();
		
		director.Construct(b2);
		Product p2 = b2.getResult();
		p2.Show();
		
	}


猜你喜欢

转载自blog.csdn.net/qq_27098879/article/details/80173388