zoukankan      html  css  js  c++  java
  • 建造者模式

    建造者模式是将复杂对象的构建表示进行分离,让同样的构建过程可以创建出不同的表示。

    比如,一个人的类,有三个属性:头、身体和脚。

    我们通过建造者模式将构建三个身体部位的动作分离开,那么,对这三个身体部位有任意一个部位构造方法不同,都会表示出不同的人来,这就是所谓的对负责对象的构建和表示进行分离的思想。

    在建造者模式下,有四个角色:product(产品类,以上的例子指的是人这个类)、抽象建造者、建造者和导演类。功能如下:

    • 产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。
    • 抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。
    • 建造者:实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品;返回组建好的产品。
    • 导演类:负责调用适当的建造者来组建产品,导演类一般不与产品类发生依赖关系,与导演类直接交互的是建造者类。一般来说,导演类被用来封装程序中易变的部分。

    代码实现:

    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;
      }
    }
    

    Builder:

    public interface PersonBuilder {
      void buildHead();
      void buildBody();
      void buildFoot();
      Person buildPerson();
    }
    
    //具体建造工具
    ConcreteBuilder
    public class ManBuilder implements PersonBuilder {
      Person person;
      public ManBuilder() {
      person = new Person();
      }
      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();
      }
    }
    

    测试:

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

    运行结果:

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

      

  • 相关阅读:
    C++_构造函数与析构函数
    华为模拟机试_C++题解
    OOP_由C到C++
    OOP_面向对象程序设计概述
    java ssm 后台框架平台 项目源码 websocket即时聊天发图片文字 好友群组 SSM源码
    springmvc SSM 多数据源 shiro redis 后台框架 整合
    【面经】5年Java面试亲身经验
    【快手初面】要求3个线程按顺序循环执行,如循环打印A,B,C
    手工实现HttpBasic校验
    Java 并发系列(一) ThreadPoolExecutor源码解析及理解
  • 原文地址:https://www.cnblogs.com/K-artorias/p/7865960.html
Copyright © 2011-2022 走看看