[問題] 共用物件

作者: largesperm (reindeer)   2016-12-22 22:48:33
請教一下 假設一個類別裡面的很多方法
都會使用到 classExample 的物件好了
每個方法都去 new 一個 跟 共用同一個會有什麼優缺點嗎
前提是如果假設很確定每個方法不會同時啟動的話
因為我一直在想 一直 new 東西
會不會用很多記憶體或是拖慢速度
還是拖慢的速度幾乎是不影響的
為了避免方法之間互相影響 最好都是 new 一個
謝謝
譬如
1. 都 new 一個
methoA
{
classExample example = getObjectFromSomeWhere();
classExample.doSomething();
}
methoB
{
classExample example = getObjectFromSomeWhere();
classExample.doSomething();
}
2. 共用
classExample sharedExample = new classExample()
methoA
{
sharedExample = getObjectFromSomeWhere();
doSomething();
}
methoB
{
sharedExample = getObjectFromSomeWhere();
doSomething();
}
作者: GoalBased (Artificail Intelligence)   2016-12-22 23:12:00
這取決於那個物件是幹嘛用的 所以你這個sample沒有意義,不過我想原因在於你還不太了解物件導向舉設物件是一個人,跳舞的時候手要做動作,吃飯的時候手也要做動作,但你手都是同一個手,不會在你跳舞或吃飯的時候就產生一個新的手
作者: largesperm (reindeer)   2016-12-22 23:16:00
methodA 我想收集很多個 classExample 物件的A屬性methodB 我想收集很多個 classExample 物件的B屬性所以可能在 for 的迴圈中 我還是得有類別是 classExample 的物件來讓我存取 我才能下 .PropertyA or B想問的是這個物件或者就像你講的 methodA 是讓某個人的手動
作者: GoalBased (Artificail Intelligence)   2016-12-22 23:20:00
舉實際的例子會比較好懂..
作者: largesperm (reindeer)   2016-12-22 23:20:00
methodB 是讓某個人的腳動 但是取得 classExample 物
作者: testPtt (測試)   2016-12-22 23:23:00
共用 一般是A new了 B就判斷sharedExample是否為空
作者: GoalBased (Artificail Intelligence)   2016-12-22 23:28:00
這不做實際的例子..
作者: largesperm (reindeer)   2016-12-22 23:28:00
沙米@@ 拍謝 實際例子就如同推文那樣只有類別名稱跟方法名稱不一樣而已
作者: GoalBased (Artificail Intelligence)   2016-12-22 23:32:00
如果你的例子 我不會共用 因為根本沒必要共用我的意思是 看你doA 和 B到底做了啥 你的human到底幹
作者: largesperm (reindeer)   2016-12-22 23:33:00
是 我的問題就是 一直 new 會不會有何影響
作者: GoalBased (Artificail Intelligence)   2016-12-22 23:33:00
和male到底是幹嘛的
作者: GoalBased (Artificail Intelligence)   2016-12-22 23:39:00
這個狀況 我不會共用 你是methodA 有一個for B也是對吧
作者: largesperm (reindeer)   2016-12-22 23:41:00
對都是要從一串 classHuman 中去撈東西假設這一串有兩萬個好了 那就要 new 兩萬次如果重複使用的話 那只需要 new 一個
作者: james732 (好人超)   2016-12-22 23:48:00
你有實際測試發現這會造成效能問題嗎?
作者: largesperm (reindeer)   2016-12-22 23:57:00
目前遇到第一個這種情況 肉體感覺不出來有道理 明天來算秒數看看
作者: neo5277 (I am an agent of chaos)   2016-12-23 17:55:00
寫成抽象類別做靜態方法?
作者: Litfal (Litfal)   2016-12-23 23:26:00
實際上要看你class要做什麼啊...例如human有個別的身高體重,而doA()會用到,那勢必得new且個別賦值阿。而且我還是看不懂你在做什麼,你如果classHuman已經有一串兩萬個了,都要去撈了幹嘛還new?你後來補充的 classMale male = new classMale();male = (classMale)human;第一行的new根本沒意義
作者: largesperm (reindeer)   2016-12-24 00:00:00
因為都要轉型才能拿到他的屬性原本的 classHuman 沒有這屬性 要轉成 classMale想到較容易舉例的例子再來請教
作者: Litfal (Litfal)   2016-12-24 11:25:00
那還是不用new阿 classMale male = (classMale)human;一行就好
作者: ssccg (23)   2016-12-24 14:29:00
你的例子根本沒有辦法說明你的使用情境啊...一般instance method的邏輯會跟instance state有關係,所以本來就一定要去取得要做事的那個instance來執行你先講清楚doA是幹麻、doB是幹麻再說吧剛才看到你後來補充的,你可能要先分清楚reference跟你的例子不管是共用還是不夠用,new classMate()都是多餘的只有共到reference變數,並沒有用到任何new出來的instance你的例子直接改成classMale male; 結果完全一樣* 分清楚reference跟instance的差別
作者: largesperm (reindeer)   2016-12-24 15:05:00
好的 感謝

Links booklink

Contact Us: admin [ a t ] ucptt.com