设计模式之建造者模式(Builder Pattern)

 应用场景

  • 需要生成的产品对象有复杂的内部结构,这些产品对象具备共性;
  • 隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。 

 划重点:与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。

1. 首先定义一个最终要建造的产品(Product

public class Human {
	private String name;
	private String sex;
	private int age;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
	}

}

2.其次是建造者的公共接口,包括建造的方法以及返回产品的方法 (Builder

public interface Builder {
	void buildName();

	void buildSex();

	void buildAge();

	Human createHuman();
}

3.具体建造逻辑的实现 (ConcreteBuilder

public class StudentBuilder implements Builder{

	private Human human;
	
	public StudentBuilder() {
		this.human = new Human();
	}

	@Override
	public void buildName() {
		human.setName("student");
		
	}

	@Override
	public void buildSex() {
		human.setSex("man");
	}

	@Override
	public void buildAge() {
		human.setAge(15);
	}

	@Override
	public Human createHuman() {
		return this.human;
	}

}
public class TeacherBuilder implements Builder{

	private Human human;
	
	public TeacherBuilder() {
		this.human = new Human();
	}

	@Override
	public void buildName() {
		human.setName("teacher");
		
	}

	@Override
	public void buildSex() {
		human.setSex("woman");
	}

	@Override
	public void buildAge() {
		human.setAge(25);
	}

	@Override
	public Human createHuman() {
		return this.human;
	}

}

4.指挥者 负责产品的生产过程&&隔离了客户与对象的生产过程(Director

(只是组装一下步骤而已,具体的生产细节在第三步实现) 

public class Director {
	public Human buildHuman(Builder builder){
		builder.buildName();
		builder.buildSex();
		builder.buildAge();
		return builder.createHuman();
	}
}

5.测试两个不同的Builder实现类,这样可以获得我们需要的产品Human,至于那些繁琐的细节,who cares!!! 

public class TestBuild {
	public static void main(String[] args) {
		Director director = new Director();
		
		Human buildStudent = director.buildHuman(new StudentBuilder());
		System.out.println(buildStudent.toString());
		
		Human buildTeacher = director.buildHuman(new TeacherBuilder());
		System.out.println(buildTeacher.toString());
	}
}

猜你喜欢

转载自blog.csdn.net/zzz127333092/article/details/81360238