Re: [問題] 有關inner class的概念

看板java作者 (sbr)時間17年前 (2009/01/10 01:26), 編輯推噓3(304)
留言7則, 2人參與, 最新討論串2/4 (看更多)
※ 引述《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")。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.173.138.249 ※ 編輯: sbrhsieh 來自: 218.173.138.249 (01/10 01:27)

01/10 01:28, , 1F
我也有想過這個做法 就是我後面說的 會變的混在一起
01/10 01:28, 1F
混在一起無大礙,只要沒有衝突就好。因為這個混和是由程式來做掉,不是人工去改, 即使 deploy 的 class 的程式碼看起來亂(甚至沒有程式碼)不會影響你繼續 maintain 程式,你需要維護的還是原來那幾個分開的 class。 ※ 編輯: sbrhsieh 來自: 218.173.138.249 (01/10 01:33)

01/10 01:31, , 2F
謝謝你的解答~ ^^ 也謝謝你辛苦的看懂我的問題XD
01/10 01:31, 2F

01/10 01:35, , 3F
現在問題是你找不找的這種工具?是否有辦法自己作一個?
01/10 01:35, 3F

01/10 01:38, , 4F
混在一起我的意思是閱讀上的問題 執行當然沒問題 工具也沒
01/10 01:38, 4F

01/10 01:40, , 5F
問題 只是想問問看有沒有更好的作法
01/10 01:40, 5F

01/10 01:42, , 6F
另外是如果要把這些strategy依次call一遍這個方法也可行嗎?
01/10 01:42, 6F

01/10 01:44, , 7F
還是一樣得每個strategyA_method()像這樣call一次?
01/10 01:44, 7F
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 我有點懷疑你是否有明白我的意思? 如果程式中會有每個 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)
文章代碼(AID): #19PuZGAq (java)
討論串 (同標題文章)
文章代碼(AID): #19PuZGAq (java)