摘要: 1.vb6的计数方案。简单高效,但是有bug。当对象成员引用自身,计数为2,当程序实际上不再使用这个对象,这个对象计数为1,因此无法自动释放。2..net的方案。我自己猜测是这样:运行环境遍历当前的堆栈(也就是函数运行的环境,如果不在这个上下文中,这个对象实际上就不被直接使用,如果也不被间接使用,那么就能确定他应该释放了),然后对堆栈中的对象进行成员检测,成员的成员检测,如此类推,最后把不在里面的对象释放掉。可想而知,这个算法代价非常高昂。如果当前有100万个对象,就要检测100万次。当然,这只是我的猜测,估计.net进行了高度的优化。vb6的计数方案,无法解决循环引用的问题。因此如果基于计数 阅读全文
posted @ 2011-01-26 13:37 诺贝尔 阅读(347) 评论(0) 推荐(0) 编辑
摘要: 五大设计原则是:1.职责单一2.对修改封闭,对扩展开放3.子类可在任何情况下替代父类4.接口细分5.具体实现依赖抽象简单指导,一看就晓:1.根据业务流程,把业务对象提炼出来。如果业务流层的链路太复杂,比如多条进线,那么就把这个业务对象分离为多个单一业务对象。当业务链路标准化后,对业务对象的内部情况做进一步的处理。把第一次标准化视为最高层抽象,第二次视为次高层抽象,以此类推,直到“恰如其分”的设计层次。第二,职责的分类需要注意。有业务职责,还有脱离业务的抽象职责,从认识业务到抽象算法是一个层层递进的过程。2.对客户代码(使用该类的地方)封闭,对服务代码(该类的具体实现可以修改,或者替换)开放。要 阅读全文
posted @ 2011-01-26 13:13 诺贝尔 阅读(799) 评论(0) 推荐(0) 编辑