- 浏览: 40504 次
-
文章分类
最新评论
1.重叠构造器模式
2.javabeans模式
3.Builder模式(构建器)
4.三种方法的调用
总的来说builder拥有javabean和重叠构造器的优点但在性能上有些缺陷
另外javabean模式在处理数据库映射时也是不可或缺的
详见effectivejava(第二版)
public class UserTC { /** * 重叠构造器模式 * 对于参数不算太多事可以使用,用户用不到的属性设置 为默认值 * 一句话重叠构造器可行,但是当参数过多时客户端代码难以编写,并且仍难难以阅读(引用effective java2.2) */ private String name; private String user; private String pass; private char sex; private int age; private String email; private String addr; private String mes; /** * 通过this方法逐步调用下层构造器 * */ public UserTC(String name) { this(name, ""); } public UserTC(String name, String user){ this(name, user, ""); } public UserTC(String name, String user, String pass){ this(name, user, pass, 'F'); } public UserTC(String name, String user, String pass, char sex){ this(name, user, pass, sex, 0); } public UserTC(String name, String user, String pass, char sex, int age){ this(name, user, pass, sex, age, ""); } public UserTC(String name, String user, String pass, char sex, int age, String email){ this(name, user, pass, sex, age, email, ""); } public UserTC(String name, String user, String pass, char sex, int age, String email, String addr){ this(name, user, pass, sex, age, email, addr, ""); } public UserTC(String name, String user, String pass, char sex, int age, String email, String addr, String mes) { this.name = name; this.user = user; this.pass = pass; this.sex = sex; this.age = age; this.email = email; this.addr = addr; this.mes = mes; } }
2.javabeans模式
public class UserBean { /** * javabeans模式 * 优点:克服了重叠构造器模式的缺点,创建类的实例比较容易,代码也易于阅读 * 缺点:构造过程通过调用方法实现,可能造成javabean处于不一致状态,调试比较困难,线程安全要付出较大的工作量 * 但是此模式在构造数据库映射类时用的较为广泛。 * */ private String name; private String user; private String pass; private char sex; private int age; private String email; private String addr; private String mes; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } public char getSex() { return sex; } public void setSex(char sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getAddr() { return addr; } public void setAddr(String addr) { this.addr = addr; } public String getMes() { return mes; } public void setMes(String mes) { this.mes = mes; } }
3.Builder模式(构建器)
public class UserBuilder { /** * 拥有了javabeans模式的易读性,而且拥有重叠构造器模式安全性,而且使用起来十分灵活 * 但其在性能较之前两种方法有点不足,总之此方法还是比较不错的 */ private final String name; private final String user; private final String pass; private final char sex; private final int age; private final String email; private final String addr; private final String mes; public static class Builder{ private String name; private String user; private String pass; private char sex = 'f'; private int age = 0; private String email = ""; private String addr = ""; private String mes = ""; public Builder(String name){ this.name = name; } public Builder user(String value){ user = value; return this; } public Builder pass(String value){ pass = value; return this; } public Builder sex(char value){ sex = value; return this; } public Builder age(int value){ age = value; return this; } public Builder email(String value){ email = value; return this; } public Builder addr(String value){ addr = value; return this; } public Builder mes(String value){ mes = value; return this; } public UserBuilder builder(){ return new UserBuilder(this); } } private UserBuilder(Builder builder){ this.name = builder.name; this.user = builder.user; this.pass = builder.pass; this.sex = builder.sex; this.age = builder.age; this.email = builder.email; this.addr = builder.addr; this.mes = builder.mes; } }
4.三种方法的调用
public class Main { /** * 多参数类的使用 * @param args */ public static void main(String args[]){ testUserBuilder(); testUserBean(); testUserTC(); } public static void testUserBuilder(){ UserBuilder userBuilder = new UserBuilder.Builder("jack").user("jack"). pass("jack").sex('f').age(20).addr("china"). email("jack@126.com").mes("java").builder(); System.out.println(userBuilder); } public static void testUserBean(){ UserBean userBean = new UserBean(); userBean.setAddr("china"); userBean.setAge(20); userBean.setEmail("jack@126.com"); userBean.setMes("java"); userBean.setName("jack"); userBean.setPass("jack"); userBean.setSex('f'); userBean.setUser("jack"); System.out.println(userBean); } public static void testUserTC(){ UserTC userTC = new UserTC("jack"); System.out.println(userTC); }
总的来说builder拥有javabean和重叠构造器的优点但在性能上有些缺陷
另外javabean模式在处理数据库映射时也是不可或缺的
详见effectivejava(第二版)
发表评论
-
JVM内存结构及分析
2017-07-16 19:38 589JVM内存模型 名称特征 ... -
JVM调优实例
2017-06-24 12:30 01.背景:由于最近上线新增业务模块,业务量要增加所以对上线服务 ... -
音视频编码转换-ffmpeg
2016-12-30 18:42 16051.前言 由于最近在做ios与android端需要做a ... -
git did not match any file(s) known to git
2016-04-23 23:49 31951.did not match any file(s) kno ... -
Static工具类线程安全问题
2016-01-08 11:39 23721.静态方法 无论是静态方法还是实例方法,在内存中都只 ... -
JavaThread-ThreadLocal笔记
2015-12-23 14:54 5471.ThreadLocal简介 早在JDK 1.2的版本中就提 ... -
JUC-CountDownLatch笔记
2015-12-23 10:53 5901.CountDownLatch简介 CountDownLat ... -
Lambda表达式实现设计模式:命令模式
2015-10-13 09:59 737如何在使用Java 8 Lambda表达式的函数式编程方式时实 ... -
mysql 错误汇总
2015-08-12 16:49 4491.Mysql ERROR 1045 (28000): Acc ... -
Java注解
2015-08-07 11:25 01.@Retention(RetentionPolicy.RU ... -
Base64 编解码 工具类
2015-07-28 22:48 43301.工具类: import java.io.Uns ... -
HttpClient(发送字符串,multipart, 参数等)
2015-07-10 11:12 2119备注:httpclient4.5 发送MultiPart/Pa ... -
转载-搜索引擎实时秒级更新
2015-07-08 14:02 886搜索是很多用户在天 ... -
tomcat-定时任务
2015-03-30 15:27 6861.监听类 import java.util.Timer ... -
JVM-工作原理
2015-03-16 23:26 662一、 JVM的生命周期 1. J ... -
tomcat-启动时启动额外线程并控制线程状态
2015-02-04 18:22 695通过启动线程可以进行后台的操作 1.创建servlet ... -
Exception in thread "main" SoapFault - faultcode: 'soapenv:Server.userException'
2015-01-20 22:32 14751.抛出此类错误大部分都是服务端发布webservice调用出 ... -
Tomcat映射虚拟目录
2015-01-19 22:43 01.设置虚拟目录 <Host>标签</H ... -
android-运行java main方法
2014-12-30 16:10 7541.右键入口类(含有Main方法的)Run Configura ... -
Mybatis 常见错误汇总
2014-12-28 22:31 01.插入数据到数据库是异常 ### Cause: java.s ...
相关推荐
Effective Java是一本关于Java编程语言的经典书籍,本笔记主要总结了Java语言的发展历程、静态工厂方法的应用、构造器模式的使用等重要知识点。 一、Java语言的发展历程 Java语言的发展可追溯到1991年,当时由...
- Item2:Builder模式适用于有大量构建参数的情况,它可以避免构造器的链式调用变得复杂且易出错。 - Item3:单例模式应使用私有构造子和静态工厂方法实现,确保只有一个实例存在。若需要线程安全,推荐使用枚举...
2. **构造器与工厂方法**:提倡使用私有构造器和静态工厂方法,以便于控制类的实例化过程,提高代码灵活性,例如实现不可变对象、延迟初始化等。 3. **接口与抽象类**:讨论了接口和抽象类在设计上的差异,强调接口...
**重叠构造器模式**:这种方法提供了多个构造器,每个构造器接受不同数量的参数。虽然解决了某些问题,但在参数较多时会导致构造器数量激增,使代码难以维护。 **JavaBeans模式**:通过无参构造器创建对象,然后...
这本书分为多个条目,每个条目都深入探讨了一个特定的Java编程实践或技巧。以下是一些主要的知识点: 1. **枚举代替常量类**:书中强调了使用枚举类型而非一组静态final字段来表示一组相关的值。枚举提供更好的类型...
**遇到多个构造器参数时的考虑**: - **重叠构造器模式**:这种模式下,每个构造器提供比前一个多一个参数,但是这种模式会导致构造器过多,增加复杂度。 - **JavaBeans模式**:虽然使用无参构造器并结合setter方法...
【Java入门级学习笔记】 Java是一种广泛使用的编程语言,尤其对于初学者来说,它具有简单性、面向对象、健壮性、安全性等显著特点。本笔记将深入浅出地介绍Java的学习路径,涵盖从环境配置到核心概念的全方位理解。...
前者是Collection层次结构中的根接口,而“Collections”是一个提供静态方法来处理某些Collection类型的类。 3. 单例属性 单例模式: 保持构造器私有【private】,并导出【提供外界访问】公有的静态成员 客户端...
这在Java中尤其有用,因为多个实例可能导致资源浪费,比如内存占用过多,或者不同实例间的操作不一致。Java中的23种设计模式中,单例模式是一种常见且实用的模式。 **单例模式的定义** 单例模式有三个关键特性: 1....