1.Builder模式介绍
Builder模式是一种一步一步创建一个复杂对象的设计模式,我认为这种设计模式的精髓就主要有两点:其一,用户使用简单,并且可以在不需要知道内部构建细节的情况下,就可以构建出复杂的对象模型;其二,对于设计者来说,这是一个解耦的过程,这种设计模式可以将构建的过程和具体的表示分离开来。
2.Builder模式的使用场景
1.相同的方法,不同的执行顺序,产生不同的时间结果时。
2.多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不同时。
3.产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个时候用建造者模式非常适合。
4.当初始化一个对象特别复杂,如参数多,切很多参数都具有默认值时。
3.Builder模式的概念
将一个复杂对象(下面说的车,手机等)的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
可以看到他主要的3个部分,还是借鉴大家普遍采用的汽车制造来说明
首先是一个抽象类Builder,Builder中声明了一个具体产品各部件所需要的抽象方法以及一个返回最终产品的抽象方法。比如建造轮胎,建造引擎,建造外壳……以及一个返回最终产品车的方法
Java代码
- public abstract class Builder {
- public abstract void buildEngine();
- public abstract void bulidTyre();
- public abstract void buildCar();
- public abstract void getCar();
- }
其次,是下面的具体实现类ConcreeteBuilder,这也是构造者模式的最主要部分,他负责详细的去定义每个部件的具体制作,也就是不同的ConcreeteBuilder实现不同的建造轮胎,引擎,外壳的方法,比如我们具体类分别为BMW,Ford。。。
Java代码
- public class BMW extends Builder{
- public void buildCar() {
- ...//造外壳细节
- }
- public void buildEngine() {
- ...//造引擎
- }
- public void bulidTyre() {
- ...//造轮胎
- }
- public Car getCar() {
- return new Car();
- }
- }
最后,是一个Director类,他类似于一个发令员,在汽车制造中,就是负责组装,将各个部件组合成最终产品,交还给客户,调用一个Builder类对象,并指导完成各步建造
Java代码
- public class Director {
- public void product(Builder builder){
- builder.buildCar();
- builder.buildEngine();
- builder.bulidTyre();
- }
- }
到此为止,生成器模式就完成了,来看看如何去制造一个具体的产品返回给客户
Java代码
- public class Client {
- public static void main(String args[]){
- Builder builder=new BMW();//创建一个Builder对象
- Director director=new Director();//创建一个Director对象
- director.product(builder);//Director对象造车
- builder.getCar();//将制造的车返回
- }
- }
最终我们的构造者/生成器模式,带给我们了这样的结果
●生成器模式可以改变它所构建的产品的内部表示,另外还隐藏了产品如何装配的细节(Director)
●每个特定的生成器与其他生成器以及程序的其余部分无关。这增强了程序的模块性,并使增加额外模块变得相对简单(很明显,只要再实现一个新的ConcreeteBuilder即可)
●由于每个生成器都是根据数据逐步构建最终产品的,因此可以对生成器所构建的每个最终产品拥有更多的控制(在ConcreeteBuilder中)
总结下生成器模式与抽象工厂的区别,他们都返回由多个方法和对象组成的类
抽象工厂模式返回一系列相关的类
生成器模式根据所提供的数据将逐步构建一个复杂的对象