设计模式9:建造者模式

建造者模式用来将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定

UML图:

我们希望获得拥有不同组件的Product,这时我们使用建造者模式,ConcreteBuilder1、2使用相同的接口,为Product加入不同组件。

Director类控制组装过程,最后返回Product实例。

代码:

Product类:

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

public class Product {
	
	private List<String> parts = new ArrayList<>();
	
	public void add(String s) {
		parts.add(s);
	}
	
	public void show() {
		for (String s: parts){
			System.out.println(s);
		}
	}
}

Builder类及其子类:

public abstract class Builder {
	
	protected Product product = new Product();
	
	public abstract void buildPartA();
	
	public abstract void buildPartB();
	
	public Product getResult() {
		return product;
	}
	
}

public class ConcreteBuilder1 extends Builder {

	@Override
	public void buildPartA() {
		product.add("part A");
	}

	@Override
	public void buildPartB() {
		product.add("part B");
	}

}

public class ConcreteBuilder2 extends Builder {

	@Override
	public void buildPartA() {
		product.add("part X");
	}

	@Override
	public void buildPartB() {
		product.add("part Y");
	}

}

Director类:

public class Director {
	
	private Builder builder = null;
	
	public Director(Builder builder) {
		this.builder = builder;
	}
	
	public Product getProduct(){
		builder.buildPartA();
		builder.buildPartB();
		return builder.getResult();
	}
}

Demo:

public class BuilderDemo {
	public static void main(String[] args) {
		Builder c1 = new ConcreteBuilder1();
		Director d1 = new Director(c1);
		Product p1 = d1.getProduct();
		p1.show();
		
		Builder c2 = new ConcreteBuilder2();
		Director d2 = new Director(c2);
		Product p2 = d2.getProduct();
		p2.show();
	}
}

  

原文地址:https://www.cnblogs.com/zcy-backend/p/6690496.html