>>14
ちょっと長いけど俺ならこんな感じになるだろうな。
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();