设计模式 构造者模式

简述

Builder模式可以将一个类的构建和表示进行分离。

例子

http://www.cnblogs.com/cc11001100/p/5939220.html

* 使用 builder 模式

    public class Student {

    private int id;
    private String name;
    private String passwd;
    private String sex;
    private String address;

    // 构造器尽量缩小范围
    private Student() {
    }

    // 构造器尽量缩小范围
    private Student(Student origin) {
        // 拷贝一份
         this.id = origin.id;
        this.name = origin.name;
        this.passwd = origin.passwd;
        this.sex = origin.sex;
        this.address = origin.address;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getPasswd() {
        return passwd;
    }

    public String getSex() {
        return sex;
    }

    public String getAddress() {
        return address;
    }

    /**
     * Student的创建完全依靠Student.Builder,使用一种方法链的方式来创建
     *
     */
    public static class Builder {

        private Student target;

        public Builder() {
            target = new Student();
        }

        public Builder address(int id) {
            target.id = id;
            return this;
        }

        public Builder name(String name) {
            target.name = name;
            return this;
        }

        public Builder password(String passwd) {
            target.passwd = passwd;
            return this;
        }

        public Builder sex(String sex) {
            target.sex = sex;
            return this;
        }

        public Builder address(String address) {
            target.address = address;
            return this;
        }

        public Student build() {
            return new Student(target);
        }
    
    }

}
  • 不使用 builder 模式

      public class Student {
    
      private int id;
      private String name;
      private String passwd;
      private String sex;
      private String address;
    
      public Student() {
      }
    
      public Student(String name, String passwd, String sex, String address) {
          super();
            this.name = name;
            this.passwd = passwd;
            this.sex = sex;
            this.address = address;
      }
    
      public int getId() {
          return id;
      }
    
      public void setId(int id) {
          this.id = id;
      }
    
      public String getName() {
          return name;
      }
    
      public void setName(String name) {
          this.name = name;
      }
    
      public String getPasswd() {
          return passwd;
      }
    
      public void setPasswd(String passwd) {
          this.passwd = passwd;
      }
    
      public String getSex() {
          return sex;
      }
    
      public void setSex(String sex) {
          this.sex = sex;
      }
    
      public String getAddress() {
          return address;
      }
    
      public void setAddress(String address) {
          this.address = address;
      }
    }
    

那么,使用 builder 模式在创建对象的时候,使用

Student s = newStudent.Builder().name("CC").password("qwerty").sex("男").address("xxx").build();

的方式可以创建,通过 builder 这个内部类的方法来规定参数的值,并且最后返回一个这样的对象,优点是参数内容清晰。而一般的创建对象时嗲用 set 方法的方式参数意义很难表达。
(后面可以多个方法列举的原因是每个方法都返回了一个 builder 对象)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,312评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,898评论 18 399
  • 我的博客地址 建造者模式 主要参考了 /冰鉴/ 的一篇博客,觉得写的很详细,然后自己敲了一遍。学习了 设计模式之建...
    下位子阅读 3,265评论 2 6
  • 一个产品有不同的组成部分,而在程序里面需要把一个产品抽检出来需要较多的零件进行处理和组装,使得构造一个产品变得非常...
    breezedancer阅读 11,416评论 5 50
  • 鸟大声喊: 飞机!你怎么不落下来呢! 我小声嘀咕: 黄小鸟,你咋不上天呢……
    S猫阅读 1,488评论 1 1