360doc--ljjzlm的文章 http://www.ahfyzs.com/rssperson/10266.aspx 360doc (http://www.ahfyzs.com) zh-cn 360doc--個人圖書館 學習JUnit http://www.ahfyzs.com/content/06/0809/15/10266_177242.shtml 2006/8/9 15:04:11
學習JUnit.在http://download.sourceforge.net/junit/中下載JUnit包并將Junit壓縮包解壓到一個物理目錄中(例如C:\Junit3.8.1)。2、在"New JUnit TestCase"對話框填寫相應的欄目,主要有Name(測試用例名),SuperClass(測試的超類一般是默認的junit.framework.TestCase),Class Under Test(被測試的類),Source Folder(測試用例保存的目錄),Package(測試用例包名),及是否自動生成main,setUp,tearDown方法。
Junit使用簡明手冊 http://www.ahfyzs.com/content/06/0809/14/10266_177220.shtml 2006/8/9 14:19:58
junit是java中書寫unit test的framework,目前一些流行的unit test工具大都都是在junit上擴展而來的。- 創(chuàng)建,從junit.framework.TestCase派生unit test需要的test case.setUp與tearDown,這兩個函數是junit framework中提供初始化和反初始化每個測試方法的。使用Ant junit task。我們除了使用java來直接運行junit之外,我們還可以使用junit提供的junit task與ant結合來運行。- <junit>,定義一個junit task.
.Net中的設計模式——Iterator模式 http://www.ahfyzs.com/content/06/0804/11/10266_173164.shtml 2006/8/4 11:56:00
能夠提供元素遍歷的集合對象,在.Net中都實現了IEnumerator接口。IEnumerable接口就像迭代功能的標識,如果集合對象需要具備迭代遍歷的功能,就必須實現該接口,并在具體實現中,創(chuàng)建與自身有關系的具體迭代器對象。由于我們應用Iterator模式,將迭代器與集合對象完全分離,所以,即便我們完全修改了ReverseArrayList的遍歷方式,實現ReverseArrayList也是非常容易的,同時它并沒有影響到集合對象本身存儲數據對象的職能。
.Net中的設計模式——Composite模式 http://www.ahfyzs.com/content/06/0804/11/10266_173162.shtml 2006/8/4 11:55:41
根據OO的特點,解決的辦法,就是讓HtmlContainerControl繼承自HtmlControl類(因為HtmlContainerControl的接口比HtmlControl寬,所以只能令HtmlContainerControl作為子類),并讓RenderBeginTag()方法成為HtmlControl類的protected方法,子類HtmlContainerControl可以直接調用這個方法。既然管理子控件的職責由ControlCollection類型負責,且Control類中的公共屬性Controls即為ControlCollection類型。
.Net中的設計模式——Factory Method模式 http://www.ahfyzs.com/content/06/0804/11/10266_173161.shtml 2006/8/4 11:55:07
在.Net中,為創(chuàng)建WebRequest對象提供了一個專門的工廠接口IWebRequestCreate,該接口僅有一個方法,即Create()方法:public interface IWebRequestCreate{ WebRequest Create(Uri uri);}ArrayList prefixList = PrefixList;調用WebRequest的靜態(tài)方法Create()時,系統(tǒng)會根據傳入的Uri對象,在prefixList中搜索前綴與PrefixList列表中的uri匹配的WebRequestPrefixElement類型對象(通過String.Compare()方法)。
策略模式的應用實踐 http://www.ahfyzs.com/content/06/0804/11/10266_173160.shtml 2006/8/4 11:54:07
話單轉換工具的目的:將某個服務提供商的話單文本文件,轉換為另一個服務提供商的話單文本文件。尤其是在Read()方法中,調用了_Convert的Convert方法:cdr = _convert.Convert(_convert.Convert(line));內部的Convert方法,即_convert.Convert(line),是將讀出來的字符串轉換為ICdrRecord對象,然后通過調用_convert.Convert(ICdrRecord record)方法,再將該對象轉換為另一種話單格式對象,但類型仍然屬于ICdrRecord。
從容自若的CTO http://www.ahfyzs.com/content/06/0804/11/10266_173159.shtml 2006/8/4 11:53:41
不管現實的某些情況是多么的不如意,但至少通過引入Adapter模式,我們就不需要改變原有的IMedia和IRadio的相關對象與業(yè)務了。FMAdapter類是FM類型的Adapter,它繼承了FM類,并實現了IMedia接口。由于新的Adapter類均實現了IMedia接口,因此,該類型的對象可以安全正確地作為Client靜態(tài)方法的參數對象傳入。通過引入Adapter模式,我們在不改變原有IMedia和IRadio的情況下,順利地將IRadio類型適配成了IMedia類型。
從實例談OOP、工廠模式和重構 http://www.ahfyzs.com/content/06/0804/11/10266_173157.shtml 2006/8/4 11:53:09
如果不談設計,設計出來的播放器可能很簡單:public class MediaPlayer{ private void PlayMp3() { MessageBox.Show("Play the mp3 file."); }即使你現在又增加了對WMA文件的播放,只需要設計WMA類,并繼承AudioMedia,重寫Play方法就可以了,MediaPlayer類對象的Play方法根本不用改變。如果讓MP3、WAV、RM、MPEG直接實現IMedia接口,而不通過AudioMedia和VideoMedia,在滿足其它需求的設計上也是不合理的。
重構初體驗 http://www.ahfyzs.com/content/06/0804/11/10266_173156.shtml 2006/8/4 11:51:41
public FactorialContainer():base(){} public FactorialContainer(int capacity):base(capacity){} protected override long Count() { long result = 1;public FibonacciContainer():base(){} public FibonacciContainer(int capacity):base(capacity){} protected override long Count() { long result = 0;public abstract MathContainer CreateInstance();
設計,由你掌握 http://www.ahfyzs.com/content/06/0804/11/10266_173155.shtml 2006/8/4 11:51:07
我們最初設想為這三種級別建立三個不同的私有方法,然后在SettleFee()方法中,引入一個日志級別參數,然后根據日志級別的值,決定調用哪一個私有方法,例如:private void WriteSimplestLog();private void WriteNormalLog();private void writeDetailedLog();現在來分析日志。我們不再從是否詳盡的角度來分類日志,而是從日志的內容或者說日志實現的功能來分類。我們可以將日志分為基本日志類、錯誤日志類、實現日志類三種。
設計,看上去很美 http://www.ahfyzs.com/content/06/0804/11/10266_173154.shtml 2006/8/4 11:50:12
設計沒有標準,模式充滿變化,我們對設計與模式的探討,就是希望能從沒有標準的設計中體驗設計的樂趣,從充滿變化的模式中尋求問題的解決之道。它并不要求前期的設計有多么的完美,實現的需求有多么的完整,你只需要把現階段考慮的問題編碼實現就可以了,隨著演進的深入,編碼也會隨之而修正,最后設計會逐漸豐滿起來,經過一系列的方法,最后的設計也漸趨完美。問題不在于設計是否過度,關鍵還是在于設計的理念。
Visitor模式的可行與不可愛 http://www.ahfyzs.com/content/06/0804/11/10266_173149.shtml 2006/8/4 11:45:31
Visitor模式的可行與不可愛。也就是說,通過Visitor模式,我將各個媒體對象的行為都交給Visitor了。從上面的Visitor實現可以看到,每個Visitor的Visit方法,實際上代表的就是各自的行為,或者是Play,或者是Resize,等等。為該行為定義一個Visitor類,繼承抽象Visitor類即可??纯幢辉L問對象,因為Visit方法接受的是抽象Visitor類對象,Accept()方法對于各種行為是完全一致的,你自然不需要修改媒體對象區(qū)間的這些所有對象了。
從Adapter模式到Decorator模式 http://www.ahfyzs.com/content/06/0804/11/10266_173148.shtml 2006/8/4 11:44:48
從Adapter模式到Decorator模式。_vedio = vedio;public RMAdapter(VedioMedia vedio):base(vedio){}注意看,與前面Adapter模式的VedioAdapter類比較,除增加了對VedioMedia的派生外,還減少了Play(),因為該方法已經從VedioMedia類中派生獲得。public RMDecorator (VedioMedia vedio):base(vedio)因此,不管是前文所述的Adapter模式,還是改進后的Adapter模式,或者引入的Decorator模式,其中的變化是靈活的,選擇權最終還是你。
從實例談Adapter模式 http://www.ahfyzs.com/content/06/0804/11/10266_173147.shtml 2006/8/4 11:43:44
熟悉Adapter模式的人都知道,Adapter模式分為兩種:類的Adapter模式、對象的Adapter模式。對象的Adapter模式,與類的Adapter模式,最大的區(qū)別就是不采用繼承的方式,而是將要包裹的對象,以聚合的方式放到Adapter中,然后用委托的方式調用其對象的方法,實現類圖如下:同時,我們要注意的是,在運用Adapter模式時,必須審時度勢,根據具體的情況,抉擇最優(yōu)的方式,或者采用類的Adapter模式,或者采用對象的Adapter模式。
UML類圖 http://www.ahfyzs.com/content/06/0804/11/10266_173133.shtml 2006/8/4 11:33:25
UML類圖。A. 類的 UML 表示。UML 的最終目標是識別出所有必須的類,并分析這些類之間的關系,類的識別貫穿于整個建模過程,分析階段主要識別問題域相關的類,在設計階段需要加入一些反映設計思想、方法的類以及實現問題域所需要的類,在編碼實現階段,因為語言的特點,可能需要加入一些其他的類。如果處于分析階段應該畫概念層類圖,當開始著手軟件設計時,應該畫說明層類圖,當針對某個特定的技術實現時應該畫實現層類圖。
中國成語英譯 http://www.ahfyzs.com/content/06/0801/20/9737_170904.shtml 2006/8/4 11:17:56
Java軟件架構設計概論 http://www.ahfyzs.com/content/06/0804/11/10266_173112.shtml 2006/8/4 11:14:44
Java軟件架構設計概論。架構設計也類似一種工作流,它是動態(tài)的,這點不象建筑設計那樣,一開始就能完全確定,架構設計伴隨著整個項目的進行過程之中,有兩種具體操作保證架構設計的正確完成,那就是設計模式(靜態(tài))和工程項目方法(RUP或XP 動態(tài)的)。由于架構設計是在動態(tài)中完成的,因此在把握架構設計的目標上就很重要,因此在整個項目過程中,甚至每一步我們都必須牢記我們架構設計的總體目標,可以概括下面幾點:
使用JFig管理你的配置文件 http://www.ahfyzs.com/content/06/0804/11/10266_173106.shtml 2006/8/4 11:11:16
由于JFig自身提供的方法稍有不便,故對其進行了封裝,構建了一個靜態(tài)類Config,并重載了JFig提供的所有public方法:<br>* @author 郁也風* @version 1.01, 2004-4-20*/public class Config {private static Logger log = Logger.getLogger(Config.class);private static JFigIF jFig;private static JFigLocatorIF jFigLoc;final public static String CONFIG_NAME = "base.config.xml"; // 缺省的配置文件名。
Ant實踐 http://www.ahfyzs.com/content/06/0801/09/10266_170324.shtml 2006/8/1 9:44:58
Ant實踐。由于Ant是一個Open Source的軟件,所以有兩種安裝Ant的方式,一種是用已編譯好的binary 文件安裝Ant,另一種是用源代碼自己build Ant。假定Ant安裝在c:\ant\目錄下。當你執(zhí)行特定平臺的程序(如exec task或cvs task)時,必須設定ant.home屬性指向Ant的安裝目錄。要想從源代碼build Ant,你要先安裝Ant源代碼發(fā)行版或從CVS中checkout jakarta-ant模塊。運行Ant非常簡單,當你正確地安裝Ant后,只要輸入ant就可以了。
業(yè)務層設計之一(BusinessDelegate) http://www.ahfyzs.com/content/06/0801/09/10266_170316.shtml 2006/8/1 9:39:32
客戶端代碼隨著業(yè)務服務接口的代碼的改變而改變。結構 客戶端(Action) ----> 業(yè)務代表 ---->查找服務(ServletLocator) ---->業(yè)務服務 請參照: 服務定位器模式,會話門面模式,代理模式。} catch (RemoteException re) { throw new GeneralFailureException(re.getMessage());} catch (RemoteException re) { throw new GeneralFailureException(re.getMessage());