我有2个方法可以被认为是工厂设计模式的案例,这个例子是在C#中,altought,可以适用于其他编程语言:
enum NinjaTypes {
Generic,
Katanna,
StarThrower,
Invisible,
Flyer
}
public class Ninja {
public string Name { get; set; }
public void jump() { ... }
public void kickAss() { ... }
}
public class KatannaNinja: Ninja {
public void useKatanna() { ... }
}
public class StarNinja: Ninja {
public void throwStar() { ... }
}
public class InvisibleNinja: Ninja {
public void becomeInvisible() {...}
public void becomeVisible() {...}
}
public class FlyNinja: Ninja {
public void fly() {...}
public void land() {...}
}
public class NinjaSchool {
// always return generic type
public Ninja StandardStudent() {...}
// may return other types
public Ninja SpecialityStudent(NinjaTypes WhichType) {...}
}
方法 StandardStudent()
总是返回一个相同类型的新对象,SpecialityStudent(...)
可能返回来自共享相同类型的不同类的新对象相同的父类(super class)/基类型。这两种方法都不是虚拟的。
问题是,这两种方法都是“工厂设计模式”吗?
我的猜测是 SpecialityStudent(...)
是,但 StandardStudent()
不是。如果第二种不是,可以考虑另一种设计模式吗?
最佳答案
我不认为那也不 FactoryMethod `也不AbstractFactory模式禁止用户使用参数为创建者方法指定类型。无论如何,您应该在设计中至少考虑两件事:
- 工厂方法有助于使客户不知道所创建对象的具体类型。从我的角度来看,明确指定要创建的对象的类型并没有错,但要注意不要在客户端类上投入太多知识,以至于无法通过工厂构造对象。
- 您的两个工厂方法都返回一个 Ninja 对象,但是您的一些 ninjas 扩展类声明了其他方法,而客户端并不知道这些方法。如果您的客户需要显式使用这些方法,那么您可能需要在设计上做出一些考虑。
关于c# - 工厂模式、另一种模式还是根本没有模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6542259/