初心者歓迎! Java相談室 その5
■ このスレッドは過去ログ倉庫に格納されています
0025烏龍茶
NGNGちょっと長いけど俺ならこんな感じになるだろうな。
HogeFactory の HOGE_CLASS はハードコードじゃなくてプロパティリソース
から読み出すとか修正する必要があるけど。VM 依存ってのが何を意味する
のか分からなかったので Win 系と Linux 系と置き換えてみたけど、意味
分かるよね。
----------[インターフェース]----------
package kaihatsu;
public interface Hoge{
public abstract void foo();
public abstract void bar();
}
----------[実装クラス1]----------
package kaihatsu.A;
import kaihatsu.*;
public class WinHoge implements Hoge{
public void foo(){/* Win 固有の処理 */}
public void bar(){/* Win 固有の処理 */}
}
----------[実装クラス2]----------
package kaihatsu.B;
import kaihatsu.*;
public class LinuxHoge implements Hoge{
public void foo(){/* Linux 固有の処理 */}
public void bar(){/* Linux 固有の処理 */}
}
----------[ファクトリ]----------
package kaihatsu;
public class HogeFactory{
private static final String[][] HOGE_CLASS = {
{"windows", "kaihatus.A.WinHoge"},
{"linux", "kaihatus.B.LinuxHoge"},
};
public Hoge getInstance(){
String os = System.getProperty("os.name");
for(int i=0; i<HOGE_CLASS.length; i++){
if(os.indexOf(HOGE_CLASS[0]) >= 0){
try{
return (Hoge)Class.forName(HOGE_CLASS[1]).newInstance();
} catch(Exception ex){/* */}
}
return null;
}
}
----------[クライアントコード]----------
import kaihatsu.*;
…
HogeFactory factory = new HogeFactory();
Hoge hoge = factory.getInstance();
hoge.foo():
hoge.bar();
■ このスレッドは過去ログ倉庫に格納されています