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

  • 相关阅读:
    DAY9学习笔记
    DAY8课下作业
    DAY8学习笔记
    DAY7课下作业
    github clone 开源代码报Permission denied (publickey)
    grandle构建工程报:javax.net.ssl.SSLException
    centos安装redash
    centos安装nodejs
    CURL执行请求
    flume定制拦截器Interceptor
  • 原文地址:https://www.cnblogs.com/itTeacher/p/2796570.html
Copyright © 2020-2023  润新知