>>13
共通の親クラスとなる抽象クラスを共通部分でつくって
環境毎に各サブクラスを実装する。

その抽象クラスにstatic な getInstance()とかの関数作って
その関数のなかで適宜環境に合わせたインスタンスを生成して返す。

各サブクラスではコンストラクタをpublicにしないで自由にnewさせない。

getInstanceするときリフレクション使えばさらに汎用性増。

参考↓とか
http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/text/Collator.html