- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
EffectiveJava讀书笔记(上)
Effective Java第一章 引言第二章 创建/销毁对象用静态工厂方法代替构造器类提供一个共有的静态工厂方法,返回类的实例。注意:与工厂模式不同,并不直接对应。静态工厂方法比起构造器的优势它们有名称:如果构造器的参数不能正确描述正被返回的对象,具有适当名称的静态方法更容易使用。当一个类需要多个带有相同签名的构造器时,就可以用静态工厂代替构造器例子:BigIbablePrime()不必每次调用它们的时候都创建新的对象:单件模式或者享元模式。静态工厂方法能为重复的调用返回相同的类,有助于类控制在哪个时间段存在哪些实例。被称为实例受控的类。他们可以返回原返回类型的的任何子类型的实例。API可以返回对象,又不会使对象的类变成共有的,适合基于接口的框架。被返回的对象由相关的借口精确指定。共有的静态工厂方法所返回的类不仅可以是非公有的,还可以随着每次调用发生变化,这取决于工厂方法参数值。静态工厂方法返回的对象所属的类,在编写该静态方法时可以不必存在(留给开发者实现)在创建参数化实例的时候,它们使代码更为简单例子:MapString, ListString m = new MapString, ListString();MapString, ListString m = HashMap.newInstance(); //减少一次参数静态工厂方法的缺点类如果不含公有或者受保护的构造器,就不能被子类化。可能鼓励程序员使用复合,而非继承它们与其他静态方法没有任何区别。要想查明如何实例化一个类是非常困难的静态工厂方法的惯用名称ValueOf: 类型转换方法getInstance: 返回唯一的实例newInstance:保证每个返回的实例都与其他不同getType/newType:返回工厂对象的类遇到多个构造器参数时要考虑构建器(建造者模式)重叠构造器模式:第一个构造器只有一个必要参数,第二个有一个可选参数,第三个有两个,以此类推,最后一个构造器有全部的可选参数。创建实例的时候,选择最短的列表参数的构造器结论:当有许多参数的时候,客户端代码会很难编写JavaBeans模式:调用一个无参数构造器来创建对象,然后用setter方法设置每个必要的参数评价:有严重的缺点,构造过程被分配到几个过程中,JavaBean可能处于不一致的状态。需要程序员付出额外的努力来确保它的线程安全。建造者方法:既能保证安全性,又能保证可读性。最好一开始就使用Builder模式.先调用类的builder方法创建一个builder,再用setter设置各个参数(注意使用return this;可以构造参数链),最后调用builder返回一个类Builder可以进行域的检查,是否违反约束条件Builder可以有多个可变参数Builder方法可以自动填充域,也可以返回不同的对象使用泛型的builderJava传统的抽象工厂实现是Class对象,用newInstance()来build。评价:newInstance()会主动调用无参数的构造函数,而且没有编译时错误,只能在runtime抛出异常。这破坏了编译时的异常检查。Builder模式的不足之处:必须先构建Builder对象。可能有性能问题,必须在有很多参数时才适合使用。用私有构造器或者枚举类型强化Singleton属性注意客户端可以使用反射机制来调用私有的构造方法:应该在类被要求创造第二个实例的时候抛出异常 AccessibleObject.setAccessble()公有属性的好处:组成类的成员的声明很清楚地表明了这个类是一个Singleton工厂方法的好处:它提供了灵活性。在不改变API的前提下可以改变该类是否为Singleton的想法,或者修改成每一个调用的线程都返回一个唯一的实例。序列化:仅仅加上implements Serializable是不够的,需要所有域都是瞬时的,而且提供一个readResolve()方法防止假冒对象。编写单个元素的枚举类型:更加简洁,无偿提供序列化机制,而且绝对防止多次实例化,是目前最好的方法。通过私有构造器强化不可被实例化的类的特性让工具类包含私有构造器,应该加上注释副作用:使该类不能被子类化避免创建不必要的对象如果对象不可变,就始终可以重用。错误的代码:会创建不必要的String实例对于同时提供了静态工厂和构造器的不可变类,通常使用静态工厂而不是构造器,以避免创建不必要的对象例子:Boolean.valueOf(String)总是优先于Boolean(String)重用一直不会被改变的可变对象错误的代码:创建了不必要的Date对象使用Static语句块能避免这个问题适配器对象:将功能委托给后备对象,为后备对象提供接口。例如Map接口的keySet()函数返回时不创建新的实例自动装箱:优先
您可能关注的文档
最近下载
- 建筑工程图集 11SG814:建筑基坑支护结构构造.pdf VIP
- 电商平台客户投诉处理协调配合措施.docx VIP
- 快速心律失常的急诊处理PPT课件.ppt VIP
- 标准图集-新型城镇化-智能灯杆.pdf VIP
- 11SG814 建筑基坑支护结构图集.docx VIP
- 2024年11月江苏苏州市中医医院(西苑医院苏州医院)招聘编外人员笔试笔试历年专业考点(难、易错点)附带答案详解 .doc
- 广西壮族自治区家庭经济困难学生认定申请表.doc VIP
- 大闽食品(漳州)有限公司企业标准.doc VIP
- 施工企业安全生产事故报告及处理制度.docx VIP
- 电商平台纠纷处理与客服投诉管理方案.docx VIP
文档评论(0)