2015070705 - EffactiveJava笔记 - 第15条 使可变性最小(2)

原创 2015年07月07日 08:17:24

   函数做法,不改变对象本身;

   过程或命令做法,改变对象本身数据.

   不可变对象比较简单,因为其只有初始化时的状态,如果你能确保所有的构造器都建立这个类的约束关系,就可以确保约束关系在对象整个生命过程中不变.

   不可变对象本质上是线程安全的,它们不要求同步,不可变对象可以被自由地共享.鼓励客户端尽可能重用现有对象.

   如何做到这一点呢?

   1.频繁用到的值,提供公有静态final常量.

   2.对1的拓展,提供静态工厂,把频繁使用的对象缓存起来.

   不可变对象可以自由共享的影响是,永远不需要进行保护性拷贝.因为拷贝的对象永远是原始对象.

   不可变对象为其他对象提供大量的构件,无论可变还是不可变的对象.如果知道复杂类的内部组件对象不会改变,要维护它的不变性约束比较容易.

   不可变类真正唯一的缺点,对于每个不同的值都需要单独的对象,代价比较高昂.

   情景:如果执行多步骤操作,并且每个步骤都会产生新对象,除最终结果,其他都会被丢弃.性能问题摆在眼前,要如何处理呢?

   方式1.猜测经常用到哪些操作,将它们做基本类型提供,那么不可变类不必为每个步骤创建新的对象;

   方式2.如果可以预测执行哪些操作,使用包级私有可变配套类;如果不能准确预测,最好的办法提供公有的可变嵌套类.如String的可变配套类是StringBuilder.

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

2015070508 - EffactiveJava笔记 - 第13条 使类和成员的可访问性最小(2)

Java那些机制完成信息隐藏呢?    1.访问控制决定类,接口,成员的可访问性;    2.对象的可访问性由该对象声明所在的位置,以及修饰对象的访问控制修饰符共同决定.      第一规则:...

2015070701 - EffactiveJava笔记 - 第13条 使类和成员的可访问性最小(3)

成员属性绝对不能公有的.为什么呢?如果此属性是非final,或者执行可变对象的final引用,一旦使属性公开,就等于放弃了对存储在这个属性中数据进行限制的能力,放弃了强制此属性不可变的能力;当属性被修...

第15条:使可变性最小化(创建不可改变类)

不可改变类是其实例对象不可改变,有人可能会想这还不简单,我们不提供改变对象 内部状态的API不就完了,没错,这是一个很重要的一条,但还有很多注意点 首先为什么要创建不可改变的类? 不可改变类比可...

2015070405 - EffactiveJava笔记 - 第57条 只对异常使用异常(2)

异常只应该使用在异常情况下,它们永远不应该用于正常的控制流中.对API设计的启发.    设计良好的API不应该强迫它的客户端为了正常控制流而使用异常.    如果类具有”状态相关”的方法,即只有特定...

2015062806 - EffactiveJava笔记 - 第41条 慎用重载(2)

----->02.基本类型和包装类导致的重载问题     java1.5之前,所有基本类型根本不同于所有的引用类型,但是引入自动拆箱和装箱,导致了真正的麻烦.     import java.ut...

2015062705 - EffactiveJava笔记 - 第38条 检查参数的有效性

第七章 方法     主要涉及方法的以下方面:如何处理参数和返回值,如何设计方法签名,如何为方法编写文档.适合普通方法和构造方法.    焦点集中在可用性,健壮性和灵活性上.      第38...

2015062808 - EffactiveJava笔记 - 第43条 返回零长度的数组或者集合,而非null

20150628 星期日 北京     对下面编程情景是否很熟悉呢?        privatefinal List cheeseInStock = ...;     ...

2015062802 - EffactiveJava笔记 - 第40条 谨慎设计方法签名

第40条 谨慎设计方法签名    20150628  星期日 北京    本条目是若干API设计技巧的总结,这些设计技巧有助于使你的API更容易学习和使用,并且比较不容易出错.    谨慎地选择方法名...

2015070404 - EffactiveJava笔记 - 第57条 只对异常使用异常(1)

20150704 星期六 北京     猜测下面的代码意图是什么呢?     try {        int i =0;     ...

2015070301 - EffactiveJava笔记 - 第52条 通过接口引用对象(1)

20150703 星期五 早晨    第40条建议,应该使用接口而不是类作为参数的类型;    一般而言,应该优先使用接口而不是类来引用对象.如果有合适的接口类型,那么参数,返回值,变量,域来说,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)