JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Software Design » Effective Java  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
話題被移動
該話題已被移動 - morchory , 2003-10-03 01:40
如果您尚不清楚該話題被移動的原因,請參考論壇規則以及本版公告或者聯系本版版主。
本主題所含的標籤
無標籤
作者 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 [Re:metavige]
wctang





發文: 7
積分: 0
於 2003-10-02 17:53 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
那下面的做法會不會比較好呢Smile 在 compiler time 擋住一些小 typo,我覺得和用類別常數沒什麼差別。重點是,可以使用未知型別。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class NoTestException extends Exception {}
 
interface TestInterface {
    public void show();
}
 
class TestSub1 implements TestInterface {
    public void show() {
        System.out.println("TestSub1");
    }
}
 
class TestSub2 implements TestInterface {
    public void show() {
        System.out.println("TestSub2");
    }
}
 
class TestFactory {
    public static TestInterface getInstance(Class subclass) 
        throws NoTestException 
    {
        try {
            return (TestInterface)subclass.newInstance();
        } catch ( Exception e) {
            throw new NoTestException();
        }
    }
}
 
public class TestMain {
    public static void main( String[] args) {
        String subclassname = "TestSub2";
 
        Class sub = null;
        try {
            sub = Class.forName(subclassname);
        } catch (Exception e) {
            System.out.println("Not a valid Class");
            return;
        }
        
        try {
            TestFactory.getInstance(TestSub1.class).show();
            TestFactory.getInstance(sub).show();
        } catch (NoTestException e) {
            System.out.println("No Such Subclass");
        }
    }
}

必需是型別名稱才能傳入 TestFactory.getInstance,所以也不能隨便寫個東西就傳了,就算真的傳個其他的 type 進去,也可以用 exception 來擋住,而且如果用個有意義的 subclass name ,也可以讓程式容易理解。重點在於就算我沒有source,只要我知道 TestInterface ,就可以自已寫個 TestSub3 傳進去,就可以和原本的程式配合了。當然,這裡的 TestFactory 並不算是個 Factory class,好名稱不好找。
maybe 我們的著眼點不同,不過我想強調的是 Java 的 reflection 是一大強項,可以多多利用。


reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
24888 [精華] [Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 metavige 1085 2003-10-01 14:51
22115 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 ymshin 106 2003-10-01 15:46
22194 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 metavige 553 2003-10-01 16:03
20771 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 davidlovesmoly 1120 2004-04-23 12:03
20767 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 metavige 1301 2004-04-23 14:37
20642 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 davidlovesmoly 260 2004-04-23 17:59
21184 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 davidlovesmoly 136 2004-04-23 18:05
15544 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 gongtow 782 2005-11-01 00:13
21918 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 ymshin 77 2003-10-01 16:26
22474 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 ingramchen 1532 2003-10-01 18:48
21985 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 metavige 273 2003-10-01 22:34
22335 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 Duncan 441 2003-10-01 22:10
21850 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 ymshin 81 2003-10-01 22:47
21897 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 wctang 815 2003-10-02 13:38
21883 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 iampoya 129 2003-10-02 14:57
21896 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 wctang 472 2003-10-02 16:08
21827 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 iampoya 461 2003-10-02 16:49
21892 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 Duncan 1539 2003-10-02 17:43
21910 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 wctang 1114 2003-10-02 18:12
21920 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 wctang 1607 2003-10-02 17:53
21904 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 Duncan 624 2003-10-02 18:08
21905 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 wctang 517 2003-10-02 18:21
21783 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 tempo 512 2003-10-03 09:35
21867 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 metavige 492 2003-10-02 20:42
21686 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 etman 466 2003-10-29 10:33
20600 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 LarryBank 27 2004-04-19 17:08
20567 Re:[Effective Java] 條款1 : 考慮以 "static factory methods" 取代建構式 metavige 150 2004-04-23 14:24
» JWorld@TW »  Software Design » Effective Java

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8