1、如果一个数组中的各个元素代表了不同的东西,考虑用Object来代替数组。
2、数组应该只用于容纳一组相似对象。
3、如果一个数组容纳了不同对象,会给array用户带来麻烦。
这个代码成功编译,但是因为基类不知道关于stack指针堆栈的情况,这个stack对象当前在一个未定义的状态。下一个对于push()调用
把新的项放入索引2的位置。(stack_pointer的当前值),所以stack有效地有三个元素-下边两个是垃圾。(Java的stack类正是有
这个问题,不要用它).
对这个令人讨厌的继承的方法问题的解决办法是为Stack覆盖所有的ArrayList方法,那能够修改数组的状态,所以覆盖正确的操作Stack指针或者抛出一个例外。(removeRange()方法对于抛出一个例外一个好的候选方法)。
这个方法有两个缺点。第一,如果你覆盖 ...
作为另一个例子,比较下面两段代码:
f()
{ Collection c = new HashSet();
//...
g( c );
}
g( Collection c )
{
for( Iterator i = c.iterator(); i.hasNext() )
do_something_with( i.next() );
}
和
f2()
{ Collection c = new HashSet();
//...
g2( c.iterator( ...
原文:http://blog.csdn.net//softwarezhang/archive/2005/04/25/362832.aspx
大多数好的设计者象躲避瘟疫一样来避免使用实现继承(extends 关系)。实际上80%的代码应该完全用interfaces写,而不是通过extends。“JAVA设计模式”一书详细阐述了怎样用接口继承代替实现继承。这篇文章描述设计者为什么会这么作。
Extends是有害的;也许对于Charles Manson这个级别的不是,但是足够糟糕的它应该在任何可能的时候被避开。“JAVA设计模式”一书 ...
1、重复的代码
首当其冲的是重复代码。如果在一个以上地点看到相同的程序结构,那么可以肯定,设法将其合二为一,程序会变得更好。
2、长函数
拥有短函数的对象会活的比较好、比较长。间接层所带来的全部利益-解释能力、共享能力、选择能力-都是由小型函数支持的。
应该积极分解函数,应该遵循这样一个原则:每当感觉需要以注释来说明什么的时候,我们就把需要说明的东西写到一个独立的函数中,并以其用途(而非实现手法)命名。
我们可以对一组或甚至短短一行代码做这件事,哪怕替换后的函数调用比函数本身还长,只要函数名称能够解释其用途,我们也该毫不犹豫 ...
1、接口修改了,什么事情都可能发生。
2、当需要修改的接口被那些“找不到,即使找到也无法修改”的代码使用时,接口的修改才会成为问题。这种情况下,我们会说,这个接口是“已发布接口”。
3、如果重构手法改变了“已发布接口”,你必须同时维护新旧两个接口,知道所有用户都有时间对这个变化做出反应,这不太困难。请尽量这么做:让旧接口调用新接口。当你修改函数名称时,请留下旧函数,让旧函数调用新函数。千万不要拷贝函数实现代码,那样会让你陷入“重复代码”的泥沼。
...
1、好代码的两个重要标志:易读、易改。
2、重构的定义:在不改变代码的外在行为的前提下,对代码做出修改,以改进程序的内部结构。
3、当你发现自己需要为一个程序添加一个特性,而代码的结构使得你不能很方便的这么做,那么先重构那个程序,使得特性的添加比较容易进行,然后再添加特性。
4、设计不良的程序,往往需要更多的代码,因为在不同的地方存在使用完全相同的语句在做同样的事情。
5、重构可以改进设计,而改进设计的一个重要方向,就是消除重复代码。代码数量的减少不会使系统运行更快,然后代码数量的减少使得未来可能的修改变得容易的多。
& ...
- 浏览: 8592 次
- 性别:

- 来自: 广州

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
java中堆和堆栈的区别
引用[u][/u][i][/i][b][/b][img][/img][url ...
-- by yinguohui -
阻塞I/O,非阻塞I/O
1、异步与同步的区别:异步不会引起request进程阻塞。而同步会。2、阻塞IO ...
-- by jokermanager -
阻塞I/O,非阻塞I/O
两个问题: 1. "read操作是否阻塞,阻塞I/O是阻塞的,而异步I ...
-- by FGhost






评论排行榜