概述
建造模式可以将一个产品内部表象与产品生成过程分割开,从而可以使一个建造过程生成具有不同内部表象的产品对象。
内部表象:一个产品常有不同的组成成分作为产品的零件,零件可能是对象,也可能不是对象,他们通常叫做产品的内部表象。
不同产品有不同的内部表象,也就是不同的零件,使用建造模式可以使客户端不需要知道所生产产品对象有哪些零件,是怎么建造的,及怎么组成产品。
所以我们就希望能够像使用汽车一样使用复杂的对象:直接告诉你我需要的对象名或者对象类型,你返回一个完成的对象实例给我。建造者返回给客户一个完整的的产品对象,而客户端无须关心该对象所包含的额属性和组建方式,这就是建造者模式的设计动机。
建造者模式构建复杂对象就像造汽车一样,是一个一个组件一个一个步骤创建出来的,它允许用户通过制定的对象类型和内容来创建他们,但是用户并不需要知道这个复杂对象是如何构建的,它只需要明白通过这样做我可以得到一个完整的复杂对象实例。
抽象建造者Builder:给顶一个接口,规范产品对象的各个成分建造。有两种方法1,产品各个成分构造过程 buildPartyA,有多少个零件就有多少个方法 2 返回结果方法
具体建造者concreteBuilder:抽象建造者的实现。
Director:指挥者。构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象,它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。
Product:产品角色。一个具体的产品对象。
导演者角色和客户端打交到,导演者将客户端创建产品的请求划分为对各个零件建造的请求,将这些请求委派给具体建造者角色,建造者角色是做具体建造工作,却不 为客户端所知,
一般来说,每个产品类就有过一个相应的具体建造者类,这些产品应当有一样数目的零件,而一个零件有一个建造方法。

class Porduct{} abstract class Builder{ public abstract void buildPart1(); public abstract void buildPart2(); public abstract Porduct returnProduct(); } class ConcreteBuilder extends Builder{ private Porduct product = new Porduct(); @Override public void buildPart1() { } @Override public void buildPart2() { } @Override public Porduct returnProduct() { return product; } } class Driector{ private Builder b = new ConcreteBuilder(); public void construct(){ b.buildPart1(); b.buildPart2(); b.returnProduct(); } }
JavaMeal
使用场景
1 产品对象有复杂的内部结构
2 对象属性相互依赖,如果一个属性必须在另一个属性被赋值后赋值。模式可以实行一种分步骤经行的建造过程。
3 即使属性间无依赖,但属性赋值前不能使用。