java设计模式之建造者模式

来源:互联网 发布:淘宝手机端套餐 编辑:程序博客网 时间:2024/05/17 16:14

概述: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

适应性:

          1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。


           2.当构造过程必须允许被构造的对象有不同的表示时。

思路:

           1.Builder


                为创建一个Product对象的各个部件指定抽象接口。


          2.ConcreteBuilder
               实现Builder的接口以构造和装配该产品的各个部件。
               定义并明确它所创建的表示。
               提供一个检索产品的接口。


          3.Director
          构造一个使用Builder接口的对象。


          4.Product
          表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。

          包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

类图:



实例:

  Builder
public interface PersonBuilder {    void buildHead();        void buildBody();        void buildFoot();    Person buildPerson();}

ConcreteBuilder

public class ManBuilder implements PersonBuilder {    Person person;        public ManBuilder() {        person = new Man();    }        public void buildBody() {        person.setBody("建造男人的身体");    }    public void buildFoot() {        person.setFoot("建造男人的脚");    }    public void buildHead() {        person.setHead("建造男人的头");    }    public Person buildPerson() {        return person;    }}

Director
public class PersonDirector {    public Person constructPerson(PersonBuilder pb) {        pb.buildHead();        pb.buildBody();        pb.buildFoot();        return pb.buildPerson();    }}


Product
<pre name="code" class="java">public class Person {    private String head;        private String body;        private String foot;    public String getHead() {        return head;    }    public void setHead(String head) {        this.head = head;    }    public String getBody() {        return body;    }    public void setBody(String body) {        this.body = body;    }    public String getFoot() {        return foot;    }    public void setFoot(String foot) {        this.foot = foot;    }}public class Man extends Person {}


Test

public class Test{        public static void main(String[] args) {        PersonDirector pd = new PersonDirector();        Person person = pd.constructPerson(new ManBuilder());        System.out.println(person.getBody());        System.out.println(person.getFoot());        System.out.println(person.getHead());    }}

result:

建造男人的身体建造男人的脚建造男人的头


0 0
原创粉丝点击