定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式的四个要素:
1.产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在实际编程中,产品类可以使有一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。
2.抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个用来返回产品。
3.建造者:实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品、返回组建好的产品。
4.导演类:负责调用适当的建造者来组建产品,导演类一般不与产品类发生依赖关系,与导演类直接交互的是建造者类。一般来说,导演类被用来封装程序中易变的部分。
代码实现:
- class Product
- {
- private String name;
- private String type;
- public void showProduct()
- {
- System.out.println("名称:"+name);
- System.out.println("型号:"+type);
- }
- public void setName(String name)
- {
- this.name = name;
- }
- public void setType(String type)
- {
- this.type = type;
- }
- }
- abstract class Builder
- {
- public abstract void setPart(String arg1, String arg2);
- public abstract Product getProduct();
- }
- class ConcreteBuilder extends Builder
- {
- private Product product = new Product();
- public void setPart(String arg1, String arg2)
- {
- product.setName(arg1);
- product.setType(arg2);
- }
- public Product getProduct()
- {
- return product;
- }
- }
- class Director
- {
- private Builder builder = new ConcreteBuilder();
- public Product getAProduct()
- {
- builder.setPart("宝马","x7");
- return builder.getProduct();
- }
- public Product getBProduct()
- {
- builder.setPart("奥迪","a6");
- return builder.getProduct();
- }
- }
- public class Client
- {
- public static void main(String [] args)
- {
- Director director = new Director();
- Product product1 = director.getAProduct();
- product1.showProduct();
- Product product2 = director.getBProduct();
- product2.showProduct();
- }
- }
复制代码
创建者模式优点:
1.建造者模式的封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和建造者类是比较稳定的。因此,将主要的业务逻辑封装在导演类中对整体而言可以取得比较好的稳定性。
2.建造者模式很容易进行扩展。如果有新的要求,通过实现一个新的建造者类就可以完成,基本上不用修改之前已经测试通过的代码,因此也就不会对原有的功能引入风险。
适用场景:一般来说,如果产品的建造很复杂,那么请用工厂模式;如果产品的建造更复杂,那么请用建造者模式。
Ps 虽然是搬运工,但全都是纯手打的。发了那么多了,回复的也没几个,有点小伤心啊!
|
|