关于建造者模式(builder模式)学习心得
2017-09-06 08:47
399 查看
前言
如果你还对builder模式一无所知,还不知道如何去使用的话,我想我这篇文章能够带你对这个模式有一个基础的认识.本文仅针对建造者模式的初学者分享.高手可以自行绕道.相信大家一定在平常编写代码的时候,遇到过builder模式,因为这个模式用起来非常简洁.几乎可以一句代码搞定需要设置的参数, 得到一个实例.大大的方便了使用者编写代码的速度.相信用过比较流行的网络框架,图片加载框架的童鞋,一定用过.好了,下面我和大家一起分享我学习的经验.学习这个模式的目的:
学习之前,还是搞懂为什么要学这个模式?这个模式的作用是什么?下面我举一个非常简单的例子,比如我需要创建一个Person对象,这个person对象中,我有很多个参数,比如:
private int id; private String name; private int age; private String birthday; private String gender; private double height; private double weight;
如果我要一次性设置这么多的属性给person,你会不会发现是不是每一次都需要
p1.setName(xxx); p1.setAge(xxx); ~~~
目前可能就只有这么几个参数还好,如果参数多起来了呢?是不是感觉写的很烦?
因为我们学习builder可以为我们减少一些代码量.增加开发速度.
当然builder模式的作用不仅仅是在此,它还可以结合单利模式进行使用,对同一个对象的多个属性进行赋值.
但作为初学者学习,建议还是先把基础的知识学好,然后自己可以继续深入研究混合模式开发哦!
下面我们来正式开始学习吧!
进入正题(学习builder模式):
我先给大家写一个完成建造者模式之后的写法,好让大家有个对比Person person = new Person.PersonBuilder(1231) .setName("张三") .setAge(12) .setBirthday("1998-01-04") .setHeight(175) .setGender("man") .setWeight(60) .build();
大家其实可以观察一下,为什么可以连续去设置多个属性呢?是因为每次返回的都是同一个对象,那么底层做了什么逻辑呢?下面我贴出我的代码:
public class Person { private int id; private String name; private int age; private String birthday; private String gender; private double height; private double weight; private Person(PersonBuilder builder) { this.id = builder.id; this.name = builder.name; this.age = builder.age; this.birthday = builder.birthday; this.gender = builder.gender; this.height = builder.height; this.weight = builder.weight; } public String getName() { return name; } public int getId() { return id; } public int getAge() { return age; } public String getBirthday() { return birthday; } public String getGender() { return gender; } public double getHeight() { return height; } public double getWeight() { return weight; } public static class PersonBuilder { private final int id; private String name; private int age; private String birthday; private String gender; private double height; private double weight; public PersonBuilder(int id) { this.id = id; } public PersonBuilder setName(String name) { this.name = name; return this; } public PersonBuilder setAge(int age) { this.age = age; return this; } public PersonBuilder setBirthday(String birthday) { this.birthday = birthday; return this; } public PersonBuilder setGender(String gender) { this.gender = gender; return this; } public PersonBuilder setHeight(double height) { this.height = height; return this; } public PersonBuilder setWeight(double weight) { this.weight = weight; return this; } public Person build() { return new Person(this); } } }
下面我给大家讲解一下,为什么要这么写?
首先我们肯定是要把需要创建那个对象空参构造方法给私有的!以便提供给PersonBuilder类使用.我们所有设置属性的操作都是操作PersonBuilder,而不是直接操作Person,所以呢?我们需要在PersonBuilder类中创建与Person类中相同字段,操作了PersonBuilder类的属性,间接的操作了Person类的属性.而要同时达到返回的是同一个对象的话,在每个设置属性的方法返回的肯定是同一个对象,那么我们所有的属性都设置好了,就可以了么?
肯定不行的,因为你现在还没有和Person类进行关联,所有还无法达到我们想要的效果.就好比,你建房子,你把材料都准备好了,没有修建也是不行的.因此,我们需要在build方法中创建一个Person实现连接.
public Person build() { return new Person(this); }
这样我们的简单的builder就已经构造完成了.希望大家能够从我的文章获得收获.
最后感谢大家阅读本篇文章.!谢谢!
相关文章推荐
- 设计模式学习总结-建造者模式(Builder Pattern)
- 设计模式学习之建造者模式(Builder,创建型模式)(6)
- 设计模式C++学习笔记之十(Builder建造者模式)
- 设计模式C++学习笔记之十(Builder建造者模式)
- C# 设计模式学习四 Builder生成器模式(关于映射实现补充)
- 设计模式C++学习笔记之十(Builder建造者模式)
- 设计模式学习总结-建造者模式(Builder Pattern)
- 步步为营 .NET 设计模式学习笔记 十、Builder(建造者模式)
- HSQLDB学习心得(1)-关于SERVER模式下多个数据库的启动问题与数据库连接
- 设计模式学习笔记——建造者模式(Builder Pattern)
- 【设计模式学习笔记六】【创建型模式】【建造者模式(Builder)】
- 设计模式C++学习笔记之十(Builder建造者模式)
- 学习设计模式--建造者模式(Builder)
- 步步为营 .NET 设计模式学习笔记 十、Builder(建造者模式)
- 学习心得:设计模式之Builder模式
- 设计模式学习——建造者模式(Builder Pattern)/生成器模式
- 步步为营 .NET 设计模式学习笔记 十、Builder(建造者模式)
- [导入]关于整理出的设计模式系列各方面学习资料
- 关于window.showModalDialog()返回值的学习心得
- 设计模式-建造者模式(Builder)