Builder设计模式(生成器设计模式)

来源:互联网 发布:linux设置用户环境变量 编辑:程序博客网 时间:2024/05/27 20:22
当需要构建内部结构复杂的对象的时候,就可以使用builder设计模式,使用该模式可以逐步的构造对象,使得对象的创建更加有弹性。该设计模式的关键就是将包含多个组件的的对象创建分多个步骤,并将这些步骤封装在一个生成器(Builder接口)中。
注意:构建的过程必须允许有不同的的表示。
一般的模式(四种角色):
1、定义产品类,空参构造方法(产品 Car)
2、定义一个接口(Builder),在接口中定义产品每一部分实现的方法,方法返回Builder对象,并有一个组成产品的方法(抽象生成器)
3、实现接口(具体生成器)
4、组成产品的控制类(指挥者)
5、在具体操作类构建对象(使用)

提示:文中只是展示builder设计模式的代码过程

代码:
  1. public class Car {
  2. private String wheel;
  3. private int color;
  4. private String door;
  5. public Car() {
  6. }
  7. public String getWheel() {
  8. return wheel;
  9. }
  10. public void setWheel(String wheel) {
  11. this.wheel = wheel;
  12. }
  13. public int getColor() {
  14. return color;
  15. }
  16. public void setColor(int color) {
  17. this.color = color;
  18. }
  19. public String getDoor() {
  20. return door;
  21. }
  22. public void setDoor(String door) {
  23. this.door = door;
  24. }
  25. @Override public String toString() {
  26. return "Car{" +
  27. "wheel='" + wheel + '\'' +
  28. ", color=" + color +
  29. ", door='" + door + '\'' +
  30. '}';
  31. }
  32. }
builder:
  1. public interface Builder {
  2. Builder buildPartA();
  3. Builder buildPartB();
  4. Builder buildPartC();
  5. Car getProduct();
  6. }
builder实现类:
在实现类中,可以实现我们需要的样式和组成的产品,对于默认的组件,可以空实现,也就是什么事也不做,这样可以通过这种方式构建不同的产品样式,这是builder设计模式的关键所在
  1. public class ConcreteBuilder implements Builder {
  2. private Car car;
  3. public ConcreteBuilder() {
  4. car=new Car();
  5. }
  6. @Override public Builder buildPartA() {
  7. car.setColor(1);
  8. return this;
  9. }
  10. @Override public Builder buildPartB() {
  11. car.setDoor("4");
  12. return this;
  13. }
  14. @Override public Builder buildPartC() {
  15. car.setWheel("6");
  16. return this;
  17. }
  18. @Override public Car getProduct() {
  19. return car;
  20. }
  21. }
  1. public class ConcreteBuilder2 implements Builder {
  2. private Car car;
  3. @Override public Builder buildPartA() {
  4. car.setWheel("4");
  5. return this;
  6. }
  7. @Override public Builder buildPartB() {
  8. car.setColor(R.color.colorAccent);
  9. return this;
  10. }
  11. @Override public Builder buildPartC() {
  12. return null;
  13. }
  14. @Override public Car getProduct() {
  15. return car;
  16. }
  17. }

组成类:
  1. /**
  2. * 内部实现组成
  3. * @author panzhijie
  4. * @version 2017-01-23 10:24
  5. */
  6. public class Director {
  7. private Builder builder;
  8. public Director(Builder builder) {
  9. this.builder = builder;
  10. }
  11. //组成完整的对象
  12. public void construct() {
  13. builder.buildPartA();
  14. builder.buildPartB();
  15. builder.buildPartC();
  16. }
  17. }
调用:
  1. ConcreteBuilder builder = new ConcreteBuilder();
  2. Director director = new Director(builder);
  3. //组成完整的产品
  4. director.construct();
0 0
原创粉丝点击