设计模式-建造者模式

建造者属于创建者模式。

建造者模式

FactoryBuilder,创建型模式。将复杂对象的构建与它的表示分离。工厂模式是造零件,建造者模式是进行组装。同样的建造过程有不同的表示。

主要结构图:
在这里插入图片描述

抽象的建造者

public abstract class Builder{ abstract void buildA(); // 零件 // 产品
	abstract Product getProduct();  // 产品里有零件的具体设置,getter/setter方法 
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

具体的建造者:工人,worker是builder的具体实现, 一个builder可能有几个不同的worker

public class Worker extends Builder{ private Product prodeuct; // 声明产品 public Worker(){ prodeuct = new Product(); // 工人创造产品 } @Override void buildA(){ product.setBuildA("xx"); } @Override Product getProduct(){ return null; }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

指挥(导演类):核心,负责指挥构建一个工程。

public class Director{ // 指挥工人按照顺序建房子,安装顺序的改变,返回完整产品类 public Product build(Builder builder){ builder.bulidA(); return builder.getProduct(); }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

测试

public class Test{ public static void main(String[] args){ Director director = new Director(); Product build = director.build(new Worker()); }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

简化

使用静态内部类,实现零件无序构造,省掉指挥者,让用户进行DIY。

步骤:

抽象的建造者

public abstract class Builder{ abstract Builder buildA(String msg); // 零件,返回具体的实现类,这是返回父类名。 // 目的使用XX.A().B();  这两个.是用A返回值作为对象来调用B方法。 // 产品 abstract Product getProduct();  // 产品里有零件的具体设置,getter/setter方法,也有buildA的默认返回值,即两个set方法,一个有参,一个无参。
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

具体的建造者:工人,worker是builder的具体实现, 一个builder可能有几个不同的worker

public class Worker extends Builder{ private Product prodeuct; // 声明产品 public Worker(){ prodeuct = new Product(); // 工人创造产品 } @Override Builder buildA(String msg){ product.setBuildA(msg); return this; // this是worker } @Override Product getProduct(){ return null; }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

测试

public class Test{ public static void main(String[] args){ Worker worker = new Worker(); Product product = worker.build("xx").getProduct(); // XX.A().B(); 链式编程 }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

建造者和抽象工厂

springsecurity用到

建造者是完整产品,抽象工厂是产品族,一系列产品

建造者是通过指挥者进行生产对象,不直接调用相关方法,抽象工厂是当客户需要调用工厂方法进行获取实例对象。

建造者是进行汽车组装工厂,抽象工厂是汽车配件生产工厂,生产一个产品族的产品。

建造者和工厂模式应用场景

建造者模式唯一区别于工厂模式的是针对复杂对象的创建。也就是说,如果创建简单对象,通常都是使用工厂模式进行创建,而如果创建复杂对象,就可以考虑使用建造者模式。

参考:建造者模式(Bulider模式)详解

文章来源: blog.csdn.net,作者:αβγθ,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_38022166/article/details/116405698

(完)