java构建器

xiaoxiao2021-02-28  76

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; } }
转载请注明原文地址: https://www.6miu.com/read-84892.html

最新回复(0)