您的位置:首页 > 其它

浅谈二十三种设计模式之构建者模式

2018-02-24 23:00 253 查看
    试想一下以下场景:神州飞船是怎么造出来的?或者说一辆汽车是怎么造出来的?我想应该是先由各个组织造出各种零件,然后再将这些组件组装起来,就造出来了神州飞船,汽车,甚至更复杂的东西都可以弄出来。
   程序源于生活,高于生活,更多的是对日常生活的抽象,总结共性。
   构建者模式即很像上面制造这些很复杂的产品的过程,它通过将一个复杂产品的零件准备和零件组装分离开来,达到了解耦合的作用。
   程序设计者在许多地方也应用了这种设计模式,例如StringBuilder,SaxBuilder等等,一般以Builder结尾的都是利用的这种设计模式。

  举个例子:我们有一个User对象,有三个属性:name,age,gendar;如果我需要一个属性不为空,而另外两个属性为空的对象怎么办?可能比较常见的就是这样做User user=new User();
user.setName("zhangsan");但是这种感觉不太好,用建造者模式改造了一下,如下:
package com.kg.demo3;

public class User {
private String name;
private int age;
private String gendar;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGendar() {
return gendar;
}
public void setGendar(String gendar) {
this.gendar = gendar;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + ", gendar=" + gendar + "]";
}
public static Builder builder(){
return new Builder();
}
static class Builder{
private User user=new User();

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

public Builder buildAge(int age){
user.age=age;
return this;
}

public Builder buildGendar(String gendar){
user.gendar=gendar;
return this;
}

public User build(){
return user;
}
}

}
那么接下来就可以这样来创建对象了:User user=User.builder().buildName("zhangsan");这就是构建者模式的一个简单应用,现在有一个第三方jar:lombok.jar,加上@Builder之后即可使用上面的方式创建对象,而无需自己加上上面内部类的代码,它会帮我们在程序编译时加上这些代码,很方便。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: