public abstract class Feature
{
public abstract int PlatformSpecificValue { get; }
public static Feature PlatformFeature
{
get
{
string platform;
// do platform detection here
if (platform == "Win32")
return new Win32Feature();
if (platform == "POSIX")
return new POSIXFeature();
}
}
// platform overrides omitted
}
也许明天我们会有另一个家族,比如 type _ B 和 type _ C 来实例化。
因此 UI 将有“ if else”来知道用户是否需要一个“ type _ A”,“ type _ B”或“ type _ C”——但是工厂类将确切地决定从类型(来自系列)中构建哪个类,以及如何调优它——什么值应该设置为它的参数,或者发送给它的承包商。所有这些——根据 UI 不知道的许多参数。
所有这些对于一个工厂类来说都太多了。