读书笔记
wangjiong
这个作者很懒,什么都没留下…
展开
-
Book Review about Head First Design Pattern 8
Iterator在对象内部使用不同的Collection来存放对象,如果从外部直接访问collection,会导致几个问题产生:1. 不同的collection类型访问的方法不同2. 会暴露代码内部结构。Iterator建立一个公用接口,对collection进行统一的封装,通过相同的接口方法访问不同的collection.Principle 8:A class should have onl原创 2006-08-28 21:32:00 · 932 阅读 · 0 评论 -
Principle 1: Your Potential Is Unlimited
If you believe you can do a thing, or you believe you cant, in either case, you are probably right.很多人成功都是因为他们能够抓住机会,但是为什么他们会在机会出现的时候能够抓住,而其他有些人却只能眼睁睁看着机会从眼前遛走。这是因为他们在机会出现之前就做好了准备。他们在机会出现之前就已经在考虑自己会成原创 2005-10-24 10:50:00 · 1016 阅读 · 0 评论 -
读"谈话的力量" 1
1. 提问题的方法。提问题也要讲究方法,当你提出的问题没有得到积极的响应时,也许就要注意是不是自己问题的类型或是语言组织上不是很正确。由于我是搞技术的,出于习惯,任何提出的问题都希望能有个明确的答复。所以我的问题通常都有点象判断题或是选择题,通常形式是"是不是","做不做","什么时间","哪里",让人回答的时候只需要很简单的一两个词语。而这样的问题属于封闭式的问题,封闭式的问题很容易让人感觉枯燥原创 2005-05-24 13:22:00 · 1031 阅读 · 0 评论 -
Create Your Own Future-Overview
个人的命运就像握在手中的小鸟一样,完全是由自己控制的。在这个社会中总有一些人是比大多数人成功的,而他们成功的原因,很多人却它归结为幸运-好的背景、正好碰上了很好的机会等等。其实,运气并不是成功的因素。Aristotle有一个理论"there is a reason for everything that happens, whether we know the law or principle b原创 2005-10-12 10:42:00 · 1020 阅读 · 0 评论 -
Review of the J2EE Blueprint 2
When to Use Value Object?1. When possible reduce the number of calls to the enterprise beans2. This implies coarse-grained enterprise beans3. Use value objects to hold dataWhen to use Data Access Obje原创 2005-05-23 22:40:00 · 838 阅读 · 0 评论 -
Over-Engineering & Under Engineering
Over-Engineering:无论是遇到一个多么小的问题,总是一开始就考虑一个非常灵活、复杂的解决方案。有些设计师认为自己对用户需求已经非常了解并且能够预料到以后会有一些什么样的改变,所以在设计结构时就考虑很多非常灵活的方式来适应以后的变化。但是有时候用户的要求并不是他们所想的那样,这些灵活的设计因此也就派不上用场,这样反而白白浪费的时间与人力,同时这些设计也无谓的增加了软件的复杂度。这种情况原创 2005-09-21 16:35:00 · 1485 阅读 · 0 评论 -
常用GUI组件 1
1. JListJList本身不支持滚动条,如果要加上滚动条,就要使用JScrollPane:JScrollPane scrollPane = new JScrollPane(wordList);JList采用的是MVC设计,虽然可以通过数组,Vector初始化一个JList,但是这样的List内容并不能动态的改变。要想动态改变List的内容,就必须得到它的Model:DefaultListMod原创 2005-09-14 13:39:00 · 1673 阅读 · 0 评论 -
RMI Review 2
客户端与服务器传递对象:在客户端与服务器之间可以传递的对象分两类,一类是Remote对象,另一类是Serializable对象,他们在处理过程中有些区别。Remote对象,他传送到客户端的时候只是一个stub,客户端实际上是通过这个stub来操作服务器端的具体对象;而Serializable对象传送到客户端是一个服务器端对象的拷贝,与服务器端对象没有了任何联系。RMI还提供一种方法可以让服务器端在原创 2005-09-09 16:32:00 · 657 阅读 · 0 评论 -
RMI Review 1
1.4和1.5在编译RMI的时候有些不同。1,4在编译的时候要产生一个stub文件,这个文件也要发布到客户端去;而1.5就没有这个文件了。RMI是一种基于借口的编程,也就是说当客户端要访问服务器的方法时,他并不能知道服务器类所提供的所有方法,它只能看见服务器类的接口所提供的方法。如果一个服务器类想让客户端使用它的方法,就必须在接口中声明,而这个接口必须继承Remote接口,所有的方法必须抛出Rem原创 2005-09-08 12:02:00 · 1090 阅读 · 0 评论 -
JDBC Review 2
6. 通过Metadata查询数据库信息有两种Metadata,一种是数据库的:DatabaseMetaData meta = conn.getMetaData();通过它可以查询一些数据库的信息,例如:ResultSet mrs = meta.getTables(null, null, null, new String[] { "TABLE" });另外一种是返回结果集的:ResultSet m原创 2005-09-07 11:25:00 · 809 阅读 · 0 评论 -
JDBC Review 1
JDBC Database URL:jdbc:subprotocol:other stuff例如URL for SQL Server:jdbc:microsoft:sqlserver://localhost:1433用jdbc连接数据库的步骤:1. 指定数据库Driver,其中又有三种方法a. 在命令行指定:java -Djdbc.drivers=com.microsoft.jdbc.sqlser原创 2005-09-05 11:27:00 · 721 阅读 · 0 评论 -
线程回顾 4
10.在界面中使用多线程对于GUI设计来说,很重要的一个原则就是要及时的给用户反馈,就算是不能立即得到结果,界面也不能停在那里,是用户不知道发生了什么事情,必须让用户随时知道程序在坐什么。所以当程序要执行一段需要消耗比较长时间的操作时,就要使用多线程。但是,有些界面控件并不是线程安全的,在使用这些控件时就要特别注意。在API doc中这些都有注明,使用的时候就可以查一下。如果想在自己另外所创建的线原创 2005-08-31 16:10:00 · 729 阅读 · 0 评论 -
Refactoring to Patterns Review 2
2. Chain Constructors当一个类有多个构造函数而这些构造函数中具有重复的代码,这就有可能会产生一些问题。这时需要找出一个最通用的构造函数(catch-all constructor),然后使其他的构造函数调用这个通用函数来降低代码的重复性。3. Encapsulate Classes with Factory这个方法的目的好像和"Replace Constructor wit原创 2005-11-01 10:57:00 · 1024 阅读 · 0 评论 -
Book Review about Head First Design Pattern 9
State一个类的内部有不同的状态,在执行一些操作时,会根据当时所处的状态得到不同的结果(新的状态)。一般做法是在这些操作中使用if/switch语句,但是这样不利于以后代码的修改。使用State,创建一个Interface,定义公用的操作,根据不同状态创建相应的state子类,分别在子类中实现具体的操作。原创 2006-08-31 11:55:00 · 976 阅读 · 0 评论 -
Book Review about Head First Design Pattern 7
Template在Template的抽象基类中,一般可以分为三种方法。1. 声明为abstract的方法,需要子类来实现2. 各子类共有的代码,在基类中实现。一般为了防止子类override,可以把这种方法声明为final3. 被称为hook方法,在基类中什么也不做,或者是执行默认的动作,子类可以override.Template和Strategy的区别:Template定义了一个算法的一系列原创 2006-08-21 15:55:00 · 990 阅读 · 0 评论 -
Book Review about Head First Design Pattern 6
CommandNull object: 在一些程序中,要针对对象是否为null做出判断,根据不同的结果作出不同的处理。但是一旦这样的情况比较多的时候,写出的程序就比较繁琐。这时可以为对象建立一个Null Object, 具有普通对象所有的方法,但是不进行任何操作,这样就可以对所有情况进行统一处理。Adapter分为object adapter, class adapter。Object Ada原创 2006-08-17 14:53:00 · 974 阅读 · 0 评论 -
Book Review about Head First Design Pattern 5
在多线程的情况下有可能产生多个实例1. 使用synchronized关键字,但是这样有可能造成资源浪费并影响性能。2. 在static initializer中就初始化实例,但是这样在客户程序还没有要用到这个对象的时候就已经创建了对象实例,造成不必要的浪费3. 使volatile关键字,进行双重检查private volatile static Singleton instance;pub原创 2006-08-15 16:57:00 · 935 阅读 · 0 评论 -
Book Review about Head First Design Pattern 4
在代码中,有时会根据不同的条件创建不同的对象,一般是使用switch语句来做,这样当有了新的对象需要创建时,就要修改代码,违反了Closed for modification,尤其是当这种代码也会在其他地方使用的时候,会给修改带来麻烦。为解决这个问题,有时候会把这部分代码抽离出来单独放到一个类里面去,这就是Simple Factory.在Simple Factory里面用不用static方法来原创 2006-08-11 11:37:00 · 1101 阅读 · 0 评论 -
Book Review about Head First Design Pattern
Inheritance的优缺点:可以代码重用。但是子类的行为可能不一致,甚至有些根本就不具有这种行为,这是就需要对每个子类的具体实现进行覆盖、修改。而且也不能动态对行为进行更换Interface的优缺点:灵活。但是代码不能重用Principle 1: Idnetify the aspects of your application that vary and separate them原创 2006-08-04 09:59:00 · 989 阅读 · 0 评论 -
Book Review about Head First Design Pattern 2
Principle 4: Strive for loosely coupled designs between objects that interactObserver Pattern:关键是subject的数据怎样传递给Observer,是直接在方法参数中传递还是让Observer通过getter来取。如果数据少,通过参数传递比较方便,但是有可能每个Observer所需要的数据不一样,造成原创 2006-08-09 15:36:00 · 893 阅读 · 0 评论 -
Book Review about Head First Design Pattern 3
Principle 5:Classes should be open for extension, but closed for modification.Decorator Pattern: Concrete object 和 Decorator object 都继承至同一个基类,但是在Java中也可以通过Interface来实现。Decorator object的构造函数中必须有concr原创 2006-08-09 15:43:00 · 1057 阅读 · 0 评论 -
Refactoring to Patterns Review 5
Encapsulate Composite with Builder有时候创建Composite是一个重复的,复杂的,易出错的过程。使用Builder来简化这个过程,并降低客户与具体方法的耦合。例如创建DOMDocument, 如果不使用Builder, 以后在DOM版本升级的时候和产生很大的麻烦。 Replace Consturctor with Creation Method构造函数有几点原创 2006-07-10 16:21:00 · 1017 阅读 · 0 评论 -
Refactoring to Patterns Review 3
Compose Method当你不能快速的理解一个方法内的逻辑时,需要将逻辑转化为一些小的方法,而这些小方法的名字可以解释这段代码的目的,这样可以使代码易用、易读、易扩展。而一个Compose Method内的代码要控制一个同等的详细程度上。可能的问题:1. 可能产生大量销的方法,这时候可以考虑先采用Extract Class。2. 可能会给Debug带来麻烦。Form Templat原创 2006-07-03 21:01:00 · 766 阅读 · 0 评论 -
Refactoring to Patterns Review 6
Move Accumulation to Collecting Parameter当在一个方法中运行一大堆代码对一个变量进行累加(例如字符串变量),可以将这个方法分解为多个易于理解的小方法(Compose Method),并给这些方法传入同一个Collection Paameter(例如StringBuilder)。Extract Composite当不同子类中实现了相同的Composite,原创 2006-09-11 11:15:00 · 892 阅读 · 0 评论 -
Refactoring to Patterns Review 7
Replace Conditional Dispatcher with Command当使用条件语句,根据不同的条件执行不同的命令,这时可以为每一种命令创建一个Command,将Command存入集合中,然后将原有条件语句替换为从集合中取出Command并执行。并不是所有条件语句都需要这样做,在以下两个情况中可以考虑。1. 需要动态替换命令。2. 命令语句庞大,逻辑复杂。Extract A原创 2006-09-11 11:28:00 · 886 阅读 · 0 评论 -
Review on Expert J2EE 1
J2EE Myths1. Portability; 过分强调可移植性,会失去一些平台所特有的能力,增大投入,降低生产力。应该是Design Once, Re-implement a Few Interface Anywhere.2. Performance: 不能依靠应用程序服务器和硬件来提高性能,在设计时就应该把性能因素考虑进去。3. Transparent:尽管应用程序服务器可以管理很多底原创 2006-09-12 11:58:00 · 978 阅读 · 0 评论 -
线程回顾 3
8. Callables and Futures实现多线程时一般用的是Runnable接口,但是他有一个问题就是他没有参数和返回值,所以当执行一个线程需要返回一个值的时候就不是很方便了。Callable接口和Runnable差不多,但是他提供了参数和返回值:public interface Callable{ V call() throws Exception;}而Future接口可以保留异步原创 2005-08-30 15:13:00 · 781 阅读 · 0 评论 -
线程回顾 2
7.Synchronization多线程很重要的一个问题就是同步的问题,如果不解决好同步的问题一个是可能会引起数据的混乱,而且还有可能造成线程的死锁。在Java 5.0之前,用synchronized来解决这个问题,在5.0中加入了一个新的类:ReentrantLock使用lock的基本形式是:myLock.lock(); // a ReentrantLock objecttry{ criti原创 2005-08-29 16:18:00 · 774 阅读 · 0 评论 -
Collection Review 2
几种常用Collection:ArrayList An indexed sequence that grows and shrinks dynamically可以随机访问,但是如果要从中间删除一个对象会影响效率,因为有些未删除的对象要相应的调整位置。非线程安全,但效率会比Vector要高,如果在单线程下,选它而不是Vector。 LinkedList An ordered sequence tha原创 2005-09-02 16:46:00 · 940 阅读 · 0 评论 -
Review of Debugging the development process 7. It's All About Attitude
Be sure programmers understand that writing bug-free code is so difficult that they cant afford not to use every means to detect and prevent bugs.几乎所有的程序员都相信世界上找不到没有bug的程序,但是不同的程序员因此在对待程序bug的态度上还有有所不原创 2004-11-30 11:43:00 · 861 阅读 · 0 评论 -
Book Review of Software Project Survival Guide 1. Hitting a Moving Target
Effective projects control changes; ineffective projects allow changes to control them.在任何一个项目中,变动都是不可避免的,主要就是看怎样来成功的控制变动。成功控制变动的关键包括成立一个变动控制小组,在项目中限制预定事项的变更,对主要成果进行变动管制。对于出现的变动,应考虑以下几个问题:变动的预期获益如何?变动原创 2004-12-03 11:27:00 · 911 阅读 · 0 评论 -
Review of Debugging the development process 6. Constant, Unceasing Improvement
Suppose that Wilbur, a newly hired programmer, spends his first year becoming your file converter specialist and then spends the next four years writing filters to read and write the file formats of c原创 2004-11-28 11:28:00 · 766 阅读 · 0 评论 -
Review of Debugging the development process 4. Unbridled Enthusiasm
这几天blog太不稳定了,真是有点烦。Try to limit the number of reports you ask other team members to write. Be sure that every report you ask for will provide more value to you or the company than would be lost by int原创 2004-11-26 13:41:00 · 831 阅读 · 0 评论 -
Review of Debugging the development process 3. Of Strategic Importance
Spend the first 10 or 15 minutes of each day making a list of answers to this question:What can I do today that would help keep the project on track for the next few months?项目之所以脱轨,主要的原因在于人们并未认真思考如何使项原创 2004-11-25 11:01:00 · 728 阅读 · 0 评论 -
Review of Debugging the development process 2. The Systematic Approach
Working smart, not working hardA common problem for servers in coffee shops is remembering whos drinking regular coffee and whos drinking the decaffeinated stuff. A coffee shop manager with unlimite原创 2004-11-24 11:38:00 · 849 阅读 · 0 评论 -
Personal Characters
You employer cant force you to be a good programmer; a lot of times your employer isnt even in a position to judge whether youre good. If you want to be great, youre responsile for making yourself原创 2004-10-29 23:16:00 · 1760 阅读 · 1 评论 -
Documentation
Kind of comments:1. Repeat of the code. A repetitious comment restates that the code does in defferent words. It merely give the reader of the code more to read without providing additional informatio原创 2004-10-28 23:14:00 · 980 阅读 · 0 评论 -
Developer Testing
Recommended approach to developer testing1. Test for each relevant requirement to make sure that the requirements have been implemented. Plan the test cases for this step at the requirements stage or原创 2004-10-19 23:10:00 · 959 阅读 · 0 评论 -
Refactoring
Reasons to refactor:1. Code is duplicated.2. A routine is too long.3. A loop is too long or too deeply nested.4. A class has poor cohesion.5. A class interface does not provide a consistent level of a原创 2004-10-21 23:48:00 · 813 阅读 · 0 评论 -
Debugging
Like testing, debugging isnt a way to improve the quality of your software; its a way to diagnose defects.Effective approach for finding a defect:1. Stabilize the error.2. Locate the source of the原创 2004-10-20 22:38:00 · 843 阅读 · 0 评论