建造者属于创建者模式。
建造者模式
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用到
建造者是完整产品,抽象工厂是产品族,一系列产品
建造者是通过指挥者进行生产对象,不直接调用相关方法,抽象工厂是当客户需要调用工厂方法进行获取实例对象。
建造者是进行汽车组装工厂,抽象工厂是汽车配件生产工厂,生产一个产品族的产品。
建造者和工厂模式应用场景
建造者模式唯一区别于工厂模式的是针对复杂对象的创建。也就是说,如果创建简单对象,通常都是使用工厂模式进行创建,而如果创建复杂对象,就可以考虑使用建造者模式。
文章来源: blog.csdn.net,作者:αβγθ,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_38022166/article/details/116405698