【发布时间】:2017-12-10 17:09:23
【问题描述】:
我有一个工厂方法,如下所示。有没有更好的方法来设计这样我就不用用switch语句实现开闭原则了
public IPolicy CreatePolicy(Context context)
{
IPolicy policy = default(IPolicy);
ISettings settings = _settings.Get(context);
Policy policyType = (Policy) Enum.Parse(typeof(Policy), settings.Policy);
switch (policyType)
{
case Policy.Policy1:
policy = new Policy1(_policy1Service, _logHandler);
break;
case Policy.Policy2:
policy = new Policy2(_policy2Service, _logHandler);
break;
case Policy.Policy3:
policy = new Policy3(_policy1Service, _policy2Service, _logHandler);
break;
}
return policy;
}
【问题讨论】:
-
你有没有想过创建一个泛型方法,其中
IPolicy -
可以说您的代码确实尊重 OCP。
CreatePolicy已关闭(调用它的客户即使添加新策略也无需更改)但在交换机的隐藏信息中对扩展开放。 OCP 说您有受保护的变体。
标签: c# oop design-patterns abstract-factory