再談多型--多型的應用舉例: (轉)
再談多型--多型的應用舉例: (轉)[@more@]
再談多型--多型的應用舉例:
這一段時間關於多型的討論可謂一浪高過一浪,各位大蝦都有高論出爐。本人也按奈不住,所以結合一下本人的工作實際,談談多型的應用問題。
在我做的早期所應用的多型情況較少,多是出現這樣一些用到多型的情況
var
s : TStrings;
begin
s := TStringList.Create;
try
s.Add('hello!');
....
finally
s.free;
end;
end;
上面這段可能在很多人的源程式中都出現過,而且以"TStringList.add"來搜的help可以看到類似的例子。對於TStrings由於其方法create是abstract所以不能直接使用必須使用其子類的Create方法。這裡就是把子類(TStringList)的例項賦給定義的父類(TStrings)物件;而Add在TStrings中是被宣告為virtual的,那麼根據多型的特性s物件在使用Add方法時會其建立時所使用的型別(TStringList)的方法而不是TStrings。
這裡還是體現不出多型的好處,那麼就拿我做過的一個表格系統為例子吧。做這個系統的時候要求做一系列表格,基本上是一個表格一個Form如:TgridForm1,TgridForm2...,然後這些Form內嵌在外部的一個TContainerForm中,由TContainerForm呼叫所有表格Form的方法如存檔(save).到這裡都沒有問題,很簡單。注意現在問題來了。系統要求每一個表格Form獨立打包,而且程式開發過後會不斷的加入新的未知的表格Form,但不允許將整個程式重新codeing和compile,對於最終來說只要down一個新的包含這個表格的包就能使用新的表格。這時多型的強大作用就發揮出來了。我是這麼做的,做一個TParentgridForm一個所有表格Form的父類,它定義了所有可能的方法(如:save),當然是Virtual的。這時各個表格Form根據業務要求自行實現Save等方法。 對於TContainerForm來說它只知道TParentgridForm不知道具體的表格Form但是由於多型的作用,當TContainerForm在呼叫內嵌在它裡面的Form的Save方法時會正確的呼叫各個表格Form的Save方法,這樣各個表格的業務邏輯就實現了。而且以後不管加多少個新的表格,TContainerForm都會實現其正確功能,並且勿需重新Compile整個系統了。哈哈,有點物件的味道。
可見如果大家善於利用多型的話,在現實的中會享受到其極大的好處。特別是對於上面這種靈活度要求很高的系統。
哈哈講了這麼多不知道大家明白不。
再談多型--多型的應用舉例:
這一段時間關於多型的討論可謂一浪高過一浪,各位大蝦都有高論出爐。本人也按奈不住,所以結合一下本人的工作實際,談談多型的應用問題。
在我做的早期所應用的多型情況較少,多是出現這樣一些用到多型的情況
var
s : TStrings;
begin
s := TStringList.Create;
try
s.Add('hello!');
....
finally
s.free;
end;
end;
上面這段可能在很多人的源程式中都出現過,而且以"TStringList.add"來搜的help可以看到類似的例子。對於TStrings由於其方法create是abstract所以不能直接使用必須使用其子類的Create方法。這裡就是把子類(TStringList)的例項賦給定義的父類(TStrings)物件;而Add在TStrings中是被宣告為virtual的,那麼根據多型的特性s物件在使用Add方法時會其建立時所使用的型別(TStringList)的方法而不是TStrings。
這裡還是體現不出多型的好處,那麼就拿我做過的一個表格系統為例子吧。做這個系統的時候要求做一系列表格,基本上是一個表格一個Form如:TgridForm1,TgridForm2...,然後這些Form內嵌在外部的一個TContainerForm中,由TContainerForm呼叫所有表格Form的方法如存檔(save).到這裡都沒有問題,很簡單。注意現在問題來了。系統要求每一個表格Form獨立打包,而且程式開發過後會不斷的加入新的未知的表格Form,但不允許將整個程式重新codeing和compile,對於最終來說只要down一個新的包含這個表格的包就能使用新的表格。這時多型的強大作用就發揮出來了。我是這麼做的,做一個TParentgridForm一個所有表格Form的父類,它定義了所有可能的方法(如:save),當然是Virtual的。這時各個表格Form根據業務要求自行實現Save等方法。 對於TContainerForm來說它只知道TParentgridForm不知道具體的表格Form但是由於多型的作用,當TContainerForm在呼叫內嵌在它裡面的Form的Save方法時會正確的呼叫各個表格Form的Save方法,這樣各個表格的業務邏輯就實現了。而且以後不管加多少個新的表格,TContainerForm都會實現其正確功能,並且勿需重新Compile整個系統了。哈哈,有點物件的味道。
可見如果大家善於利用多型的話,在現實的中會享受到其極大的好處。特別是對於上面這種靈活度要求很高的系統。
哈哈講了這麼多不知道大家明白不。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1007119/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 談談多型多型
- 淺談多型——概念描述 (轉)多型
- 多型中的轉型多型
- java多型例項Java多型
- 多型,向上向下轉型多型
- 第二話 再探多型多型
- java多型-向上轉型和向下轉型Java多型
- c#——泛型的多種應用C#泛型
- 再談應用程式的例項問題 (轉)
- 批註:多型例項多型
- 再談c++型別轉換C++型別
- java多型抽象類例項Java多型抽象
- 多型性的論述 (轉)多型
- 剖析C++多型:用C實現簡單多型C++多型
- React 應用中的效能隱患 —— 神奇的多型React多型
- 多型。多型
- 多型~多型
- 多型多型
- OC的多型(執行時)轉多型
- 多型的概述多型
- Java 的多型Java多型
- 多型的理解多型
- 簡單談談方法過載和方法重寫(編譯時多型和執行時多型)編譯多型
- 龍生九子----多型 (轉)多型
- java多型-優化上個例項Java多型優化
- c#多型性測試小例C#多型
- Java多型Java多型
- 多型一多型
- 11 #### 多型多型
- 多型性多型
- java中的多型Java多型
- 多型的總結多型
- C++的多型C++多型
- Java 介面實現多型 -- 膝上型電腦綜合例項Java多型
- 再見數字化轉型:對數字化轉型的再思考
- Java基礎之淺談繼承、多型Java繼承多型
- 多型中的返回值型別多型型別
- 什麼是Java多型?如何實現Java多型?Java多型