java构建器

Java构建器

构建复杂对象的方式。


静态工厂和构造器都不能很好的构建大量的可选参数,当一个类创建时需要多个参数且不是所有参数都必须时,有以下解决方案:

一惯采用充重叠构造器模式——在这种模式下,你提供第一个只有必要参数的构造器,第二个构造器有一个可选参数,第三个有两个可选参数,依次类推。

  • 缺点: 当有许多参数时,客户端的代码难写且难以阅读。

通过JavaBeans模式

  • 创建无参的构造器,通过setter方案来对属性进行赋值

            //People类
                public class People{
                    private int higher;
                    private int weighter;
                    ...
                    public setHiger(int higher){
                        this.higher = higher;
                    }
                    ....                
                }
    

        //People类包含人的基本属性 先创建无参people对象
        People people = new People();
        //属性赋值
         people.setHiger("178");
         prople.setweighter("54");

  • 缺点:构造过程分到几个调用中,在构造过程中JavaBean可能处于不一致的状态。类无法仅仅通过检验构造器参数的有效性来保证一致性。

Bulider模式

一个构建QQ邮箱bean实例

package com.netty.mail;

/**
 * Created by Forgot on 2017/7/8.
 */
public class MailMessage {

private String topic;

private String content;

private String qq_email;

//是否发送附件 默认不发送
private boolean flag = false;

//文件位置
private String filepath;

public String getFilepath() {
    return filepath;
}

public void setFilepath(String filepath) {
    this.filepath = filepath;
}

public boolean isFlag() {
    return flag;
}

public void setFlag(boolean flag) {
    this.flag = flag;
}

public String getQq_email() {
    return qq_email;
}

public void setQq_email(String qq_email) {
    this.qq_email = qq_email;
}

public String getTopic() {
    return topic;
}

public void setTopic(String topic) {
    this.topic = topic;
}

public String getContent() {
    return content;
}

public void setContent(String content) {
    this.content = content;
}

public static class Bulider {
    private String topic;

    private String content;
    private boolean flag = false;
    private String qq_email;
    private String filepath;

    public Bulider topic(String val) {
        topic = val;
        return this;
    }

    public Bulider content(String val) {
        content = val;
        return this;
    }

    public Bulider qq_email(String val) {
        qq_email = val;
        return this;
    }
    public Bulider flag(boolean val){
        flag = val;
        return this;
    }

    public Bulider filepath(String val){
        filepath = val;
        return this;
    }
    public MailMessage build(){
        return  new MailMessage(this);
    }
}

private MailMessage(Bulider bulider){
    topic = bulider.topic;
    content = bulider.content;
    qq_email = bulider.qq_email;
    flag = bulider.flag;
    filepath = bulider.filepath;
}

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值