设计模式笔记————建造者模式

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

客户端只需指定需要建造的类型,具体建造的过程由建造者类(Director)完成。

建造者模式结构图:
建造者模式结构图
建造者模式主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。由于指挥者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者(ConcreteBuilder)就可以了。

Product 类——产品类,由多个部件组成:

public class Poduct {

	private List<String> parts = new ArrayList<String>();
	
	//装配产品部件
	public void add(String part) {
		parts.add(part);
	}
	
	//展示产品
	public void show() {
		System.out.println("产品部件");
		for (String string : parts) {
			System.out.println(string);
		}
	}
}

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

public interface Builder {

	public void builderPartA();
	public void builderPartB();
	public Poduct getResult();
}

ConcreteBuilder1 类——具体建造者类,决定内容表示。

public class ConcreteBuilder1 implements Builder {
	
	private Poduct poduct = new Poduct();
	//选择组件A和组件B
	@Override
	public void builderPartA() {
		poduct.add("PartA");
	}

	@Override
	public void builderPartB() {
		poduct.add("PartB");
	}

	@Override
	public Poduct getResult() {
		return poduct;
	}
}

ConcreteBuilder2 类——具体建造者类:


public class ConcreteBuilder2 implements Builder {

	private Poduct poduct = new Poduct();
	//选择组件X和组件Y
	@Override
	public void builderPartA() {
		poduct.add("PartX");
	}

	@Override
	public void builderPartB() {
		poduct.add("PartY");
	}

	@Override
	public Poduct getResult() {
		return poduct;
	}
}

Director 类——指挥者类,决定组装的顺序。

public class Director {

	public void constructPoduct(Builder builder) {
		builder.builderPartA();
		builder.builderPartB();
	}
}

客户端代码,客户不需要知道具体的建造过程。

public class test {

	public static void main(String[] args) {

		Director director = new Director();
		Builder builder1 = new ConcreteBuilder1();
		Builder builder2 = new ConcreteBuilder2();
		//用ConcreteBuilder1的方法来建造产品
		director.constructPoduct(builder1);
		builder1.getResult().show();
		//用ConcreteBuilder2的方法来建造产品
		director.constructPoduct(builder2);
		builder2.getResult().show();
	}
}

建造者模式是在 当创建复杂对象的算法应该独立于 该对象的组成部分以及它们的装配方式时 适用的模式

猜你喜欢

转载自blog.csdn.net/BZeHong/article/details/88241920