例如:下面的接口定義了組件的功能:發(fā)送消息;類Transceiver實現(xiàn)了該接口;而其子類Pool只是管理多個Transceiver對象,而沒有提供自己的接口實現(xiàn)。建議使用組合方式,而不是繼承!
public interface ITransceiver{
public abstract send(String msg);
}
public class Transceiver implements ITransceiver {
public send(String msg){
System.out.println(msg);
}
}
//使用繼承方式的實現(xiàn)
public class Pool extends Transceiver{
private List pool = new Vector();
public void add(Transceiver aTransceiver){
pool.add(aTransceiver);
}
public Transceiver get(int index){
pool.get(index);
}
}
//使用組合方式的實現(xiàn)
public class Pool {
private List pool = new Vector();
public void add(Transceiver aTransceiver){
pool.add(aTransceiver);
}
public Transceiver get(int index){
pool.get(index);
}
}
拆分過大的類
如果一個類有太多的方法(超過50個),那么它可能要做的工作太多,我們應該試著將它的功能拆分到不同的類中,類似于規(guī)則四。
作用截然不同的對象應該拆分
在構(gòu)建的過程中,你有時會遇到這樣的問題:對同樣的數(shù)據(jù),有不同的視圖。某些屬性描述的是數(shù)據(jù)結(jié)構(gòu)怎樣生成,而某些屬性描述的是數(shù)據(jù)結(jié)構(gòu)本身。最好將這兩個視圖拆分到不同的類中,從類名上就可以區(qū)分出不同視圖的作用。
類的域、方法也應該有同樣的考慮!
盡量減少對參數(shù)的隱含傳遞
兩個方法處理類內(nèi)部同一個數(shù)據(jù)(域),并不意味著它們就是對該數(shù)據(jù)(域)做處理。許多時候,該數(shù)據(jù)(域)應該作為方法的參輸入數(shù),而不是直接存取,在工具類的設(shè)計中尤其應該注意。例如:
public class Test{
private List pool = new Vector();
public void testAdd(String str){
pool.add(str);
}
public Object testGet(int index){
pool.get(index);
}
}
兩個方法都對List對象pool做了操作,但是,實際上,我們可能只是想對List接口的不同實現(xiàn)Vector、ArrayList等做存取測試。所以,代碼應該這樣寫:
public class Test{
private List pool = new Vector();
public void testAdd(List pool, String str){
pool.add(str);
}
public Object testGet(List pool, int index){
pool.get(index);
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |