zoukankan      html  css  js  c++  java
  • Java设计模式三:建造者模式(Builder Pattern)

    建造者模式也叫做生成器模式,将一个复杂的对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。

    角色:
    1. builder抽象建造者: 为创建一个产品对象的各个部件指定抽象接口.

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

    3. Director导演:负责安排已有模块的顺序,然后告诉Builder开始建造.

    4. Product产品类: 表示被构造的复杂对象.通常实现了模板方法模式.

    类图:

     

    实例:
    //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;
      }
    }

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

    //Product
    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());
      }
    }

  • 相关阅读:
    STL容器 erase的使用陷井
    转:VC++线程同步-事件对象
    VC线程同步方法
    C/C++四种退出线程的方法
    rabbitMQ 常用命令
    Spring @Configuration
    Spring RabbitMQ 延迟队列
    rabbitmq web管理界面 用户管理
    Linux下tar.gz 安装
    Linux下RPM软件包的安装及卸载
  • 原文地址:https://www.cnblogs.com/itTeacher/p/2796570.html
Copyright © 2011-2022 走看看