本文共 2875 字,大约阅读时间需要 9 分钟。
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
或者说,用户只需要知道他需要什么,而不需要知道这个东西的具体是怎样创造出来的 。 他与工厂模式的区别在于,他们都封装了具体的创建过程,建造者模式是一个产品的不同生产过程,而工厂模式提供的是不同的产品。建造者模式在这样的情况下使用:
1.当产品类的内部结构较复杂,不容易构建或易出错。 2.产品之间的属性相互依赖,即对产品的构造顺序有要求,如人要先有肚子才有手。建造者模式有这样4钟角色:
1.一个复杂的产品类。 2.一个抽象类其内约束了产品的构造方式,并有一个返回产品的方法。 3.继承抽象类的具体实现类,用来进行具体的构造。 4.指导者类控制产品的生产顺序并返回。如果我们需要一个人类,人有手有脚有肚子有脑袋等等…
简单创建这样一个类/** * @author : cjd * @Description : 人类 * @create : 2018-01-23 13:19 **/public class Person { private String head ; private String tummy; private String hand; private String foot; public String getHead() { return head; } public void setHead(String head) { this.head = head; } public String getTummy() { return tummy; } public void setTummy(String tummy) { this.tummy = tummy; } public String getHand() { return hand; } public void setHand(String hand) { this.hand = hand; } public String getFoot() { return foot; } public void setFoot(String foot) { this.foot = foot; }}
然后创建一个抽象构建类,这个类约束了创建人类需要有各种部件,
在这里即set方法,以及一个获取的方法:/** * @author : cjd * @Description : 抽象人类构建类 * @create : 2018-01-23 13:35 **/public abstract class PersonBuilder { Person person = new Person(); public abstract void buildHead(); public abstract void buildTummy(); public abstract void buildHand(); public abstract void buildFoot(); public Person getPerson() { return person; }}
建造者模式就是对一个产品的不同建造方式,所以我们需要一个比较胖的人的时候,就需要创建这样的一个类,同理得瘦的人的创建。
/** * @author : cjd * @Description : 肥的人 * @create : 2018-01-23 13:38 **/public class FatPerson extends PersonBuilder { @Override public void buildHead() { person.setHead("小脑袋"); } @Override public void buildTummy() { person.setTummy("大屁股"); } @Override public void buildHand() { person.setHand("细手"); } @Override public void buildFoot() { person.setFoot("肥腿"); }}
最后这一系列的构建需要通过指挥者来调用:
/** * @author : cjd * @Description : 指挥者类 * @create : 2018-01-23 13:46 **/public class PersonDirector { public Person constructPerson(PersonBuilder pb) { //画头画肚子画手画脚 pb.buildHead(); pb.buildTummy(); pb.buildHand(); pb.buildFoot(); return pb.getPerson(); }}
客户端只需要这样进行调用就可以直接得到人类并通过一系列构造得到的胖的人:
/** * @author : cjd * @Description :主函数 * @create : 2018-01-23 13:49 **/public class Main { public static void main(String[] args) { PersonDirector pd = new PersonDirector(); Person person = pd.constructPerson(new FatPerson()); System.out.println(person.getHead()+person.getTummy()+person.getHand()+person.getFoot()+"的人"); }}
得到了小脑袋大屁股细手肥腿的人
建造者模式和工厂模式都是封装了创建过程,工厂模式封装的是不同产品的创建过程,建造者模式封装的是同一产品的不同属性实现。
它与策略模式又有所不同,策略模式关注的是行为,算法的替代,建造者模式是一种创建型模式,关注的是对象的生成。
通过建造者模式创建的对象是稳定的,不会因疏忽多了或少了什么。
转载地址:http://ygiob.baihongyu.com/