我可以理解工厂方法的价值,但我正在努力使用专用工厂类的价值。
这将有效:
class Brady
{
int age;
String name;
static Brady create(String who)
{
if(who.equals("Cindy")) return new Cindy();
if(who.equals("Jan")) return new Jan();
if(who.equals("Marcia")) return new Marcia();
return null;
}
}
class Marcia extends Brady {}
class Cindy extends Brady {}
class Jan extends Brady {}
...
Jan jan = (Jan)Brady.create("Jan");
那么有没有什么理由使用工厂类呢?
class Brady
{
int age;
String name;
}
class Marcia extends Brady {}
class Cindy extends Brady {}
class Jan extends Brady {}
class BradyFactory
{
static Brady create(String who)
{
if(who.equals("Cindy")) return new Cindy();
if(who.equals("Jan")) return new Jan();
if(who.equals("Marcia")) return new Marcia();
return null;
}
}
Jan jan = (Jan)BradyFactory.create("Jan");
这似乎浪费了额外的代码。当需要实例时,我确实理解工厂类的有用性:
class BradyFactory
{
Brady brady;
BradyFactory(String who)
{
if(who.equals("Cindy"))
brady = new Cindy();
else if(who.equals("Jan"))
brady = new Jan();
else if(who.equals("Marcia"))
brady = new Marcia();
}
public BradyFactory addChore(Chore chore)
{
brady.addChore(chore);
return this;
}
Brady create()
{
return brady;
}
}
Jan jan = (Jan)new BradyFactory("Jan")
.addChore(Chore.Dishes)
.addChore(Chore.Washing)
.create();
...或者当需要Factory的子类时。
所以我的问题是:除了需要工厂的实例或工厂子类之外,将简单工厂方法放在专用工厂类中是否有任何价值?
答案 0 :(得分:2)
通常,当您在不同时间插入对象的不同实现时,工厂方法将放置在单独的类中。工厂是获取对象实例的众所周知的入口点,需要始终可以找到。但是工厂可能会在多个实现中进行选择,或者通过反射动态加载它们,而调用者不知道(或关心)返回哪个实现。