これは、同じ問題を Java に翻訳したものです。
元の例
public interface UserFactoryIF
{
User createNewUser();
}
次に、Factory の実装
public class UserFactory implements UserFactoryIF
{
public User createNewUser()
{
// whatever special logic it takes to make a User
// below is simplification
return new User();
}
}
集中プロデューサに対して単一のインターフェースを定義しているので、ファクトリのインターフェースを定義することに特別な利点はありません。通常、同じ種類の製品のさまざまな実装を作成する必要があり、ファクトリはさまざまな種類のパラメーターを使用する必要があります。つまり、次のようになります。
public interface User
{
public String getName();
public long getId();
public long getUUID();
// more biz methods on the User
}
工場は次のようになります。
public class UserFactory {
public static User createUserFrom(Person person) {
// ...
return new UserImpl( ... );
}
public static user createUserFrom(AmazonUser amazonUser) {
// ... special logic for AmazonWS user
return new UserImpl( ... );
}
private static class UserImpl implements User {
// encapsulated impl with validation semantics to
// insure no one else in the production code can impl
// this naively with side effects
}
}
これが要点を理解してくれることを願っています。