java 板


LINE

※ 引述《sbrhsieh (sbr)》之銘言: : 標題: Re: [問題] 有關inner class的概念 : 時間: Sat Jan 10 01:26:38 2009 : : ※ 引述《LeoSW (易─雪)》之銘言: : : 不好意思 : : 最近在寫一支程式時 碰到了一個問題 : : 想要請問一下板上的高手們 : : 問題是這樣的 : : 我本來有很多個類似的class(事實上是繼承同一個super class) : : 然後現在想要把這些class都變成同一個class的inner class : : (這個class基本上和前面的class樣繼承同一個super class) : : 可是因為新的這個class的環境的關係(這裡跟java沒有關係) : : 所以只能存在一個class(包含不能有其他的inner class) : : 可是因為又想要有inner class的概念 : : 就是在小幅度的修改這些subclass的前提下 : : 又不失各個class的功能性 : : 請問有辦法做到最後只有一個class嗎? : : 因為如果只是把每個subclass的內容都貼進來 : : 除了閱讀上的困難 也可能會有method或variable之間的干擾 : : 另外我有想過藉由constructor的不同來區分 : : 可是這樣還是沒辦法區分不同inner class之間method的不同 : : variable也會參雜在一起 : : 請問有什麼好方法嗎? : : 在這邊先謝謝大家~ : : 我看的有點霧~~~~ : : 簡單來說就是你最後只能 deploy 一個 class(環境限制),這個 deployed class 的 : 功能在不同的狀態會不同,你本來是由幾個 classes 來分別實做出一套功能(Strategy : Pattern)。 : : 這種情形我覺得比較好的作法是,你不要改原來的架構,每個 ConcreteStrategy : 保持為獨立的 class(也不需要把這些 ConcreteStrategy 改為 deployed class : 的 inner class),然後使用 bytecode level 的工具在 deploy 之前,把所有 : ConcreteStrategy 合併成最後要 deploy 的單一 class。 : 轉換程式可以透過 mangling ConcreteStrategy class 的 field/method name : 來避免衝突(比如說 class: StrategyA 有個 field named "data",可以修成 : "StrategyA_data")。 先再次謝謝你的回答 :) (真是不好意思沒有把問題說的很清楚) 嚴格來說我要做的功能應該比較像是Composite Pattern而不是Strategy Pattern 大概把我的架構做個說明: 有一個SuperClass(寫好的 不能改) 以及很多已經有的(寫好的可以改 但是希望不要改太多) SubClassA extends SuperClass SubClassB extends SuperClass SubClassC extends SuperClass 現在想要的是說 每一種SubClass各有一個Object 然後對每一個SubClass的Object依序做同一件事情 如果今天沒有 最後只能有一個Class的限制的話 那很直覺的作法就是: class NewSubClass extends SuperClass{ void NewMethod(){ SuperClass[] list = new SuperClass[number]; /*for each list[i] = new SubClassX();*/ for(int i=0;i<list.length;i++){ list[i].method(); } } } 可是這樣就會有很多個Class 而不是環境限制的只可以有一個Class 當然你的方法也是可以做到同樣的效果 只是當要對所有的class做同一件事情時 就得寫成一長串了 不曉得這樣子有沒有其他的辦法呢? : : : -- :



※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 218.173.138.249 : ※ 編輯: sbrhsieh 來自: 218.173.138.249 (01/10 01:27) : 推 LeoSW:我也有想過這個做法 就是我後面說的 會變的混在一起 01/10 01:28 : : 混在一起無大礙,只要沒有衝突就好。因為這個混和是由程式來做掉,不是人工去改, : 即使 deploy 的 class 的程式碼看起來亂(甚至沒有程式碼)不會影響你繼續 maintain : 程式,你需要維護的還是原來那幾個分開的 class。 : ※ 編輯: sbrhsieh 來自: 218.173.138.249 (01/10 01:33) : 推 LeoSW:謝謝你的解答~ ^^ 也謝謝你辛苦的看懂我的問題XD 01/10 01:31 : → sbrhsieh:現在問題是你找不找的這種工具?是否有辦法自己作一個? 01/10 01:35 : 推 LeoSW:混在一起我的意思是閱讀上的問題 執行當然沒問題 工具也沒 01/10 01:38 : → LeoSW:問題 只是想問問看有沒有更好的作法 01/10 01:40 : → LeoSW:另外是如果要把這些strategy依次call一遍這個方法也可行嗎? 01/10 01:42 : → LeoSW:還是一樣得每個strategyA_method()像這樣call一次? 01/10 01:44 :  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ : 我有點懷疑你是否有明白我的意思? : 如果程式中會有每個 ConcreteStrategy 的某項操作依序執行的動作,這就不是 : Strategy Pattern。要採用我提到以工具來轉換程式的作法,你的程式在使用這些 : ConcreteStrategy object 時要避免用到 polymorphism 特性(避免以 base class : reference 來操作這些 ConcreteStrategy object),這樣子工具才容易實做轉換。 : : ※ 編輯: sbrhsieh 來自: 218.173.129.252 (01/10 02:19) : ※ 編輯: sbrhsieh 來自: 218.173.129.252 (01/10 02:37) --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.204.133.40







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job 或 站內搜尋

TOP