Abstract Factory/Factory方法的经典实现基于多态性.但在最低级别,我们必须有一些不基于多态性的工厂,并打破开放原则:
public Device Create(string deviceName)
{
switch (deviceName)
{
case "Device1": return new Device1();
case "Device2": return new Device2()'
default: throw new NotSupportedDeviceException(deviceName);
}
}
Run Code Online (Sandbox Code Playgroud)
这种工厂有什么特别的名字吗?
从我所看到的,您已经发布了一个完美有效的Factory Method模式示例:
确实,内部实现有点笨拙(切换案例).但是,这并没有使它成为真正的工厂方法模式.
我真的不知道你的例子"不是基于多态",也不是"打破开放/封闭原则".如果我完全忽略了这一点,请随时更新您的帖子,以帮助我们解决您的问题.
现在,如果Factory方法正在获取传递的deviceName,并使用它来查找要实例化的具体类的完全匹配(使用反射),那将绝对打破工厂方法模式,因为调用者必须具有对该方法的深入了解.不同的具体课程.但正如目前所写,传递的deviceName只是决策过程中使用的一块数据 - 它不会破坏工厂模式的封装.
小智 6
public class Factory
{
private Map<String, Device> devices;
public Factory(Map<String, Device> devices)
{
this.devices = devices;
}
public Device Create(String deviceName)
{
return devices.get(deviceName);
}
}
Run Code Online (Sandbox Code Playgroud)
使用依赖注入配置映射.