【发布时间】:2011-08-22 15:03:18
【问题描述】:
我一直在研究开放封闭原则,听起来不错,所以我想实践它的教义。 我打算将我新发现的知识应用到现有项目中,但马上就有点卡住了。
如果出现一个新的 UserType(这很可能),这将需要更改,它还没有关闭修改。怎么能绕过这个?
根据我的阅读,听起来我应该在这里实现一个工厂而不是应用 OCP?
Factory which breaks Open-closed principle
private void BuildUserTree(User user)
{
switch (user.UserType)
{
case UserType.FreeLoader:
BuildFreeLoaderTree();
break;
case UserType.Premium:
BuildPremiumTree();
break;
case UserType.Unlimited:
BuildUnlimitedTree();
break;
default:
throw new Exception("No UserType set");
}
}
谢谢, 可汗
【问题讨论】: