以前在 csdn上看到一篇 “你还在使用if/else吗?”文章,提到如果你还在使用if语句,那么你就需要对你的代码重构。那篇文章许多人的评论上褒贬不一,但我现在想举的一个例子是对if/else的重构。(当然,是从别人那偷学来的,^_^)。
enum employeetype
{
salers;
engineer;
manager;
}
if(employee==emloyeetype.salers)
{
//如何发工资
}
else if(employee==employeetype.manager)
{
//如何发工资
}
//................
这样写未尝不可,但是如果要是新加入一个角色,那么会如何处理呢?你就需要修改哪个枚举,并且后贴上个if/else,那么我按照面向对象的想法来实现重构呢?
abstract class employee
{
//.....getsalary abstract
}
class manager:employee
{
//..... override method
}
//......other roles classes
class Salary
{
static void Main()
{
employee em = new Manager();
em.Getsalary();
}
}
这个例子是用多态来解决if/else结构中的多重选择问题,使得但变化来临时,只需要对系统进行扩展,而不是修改,开闭原则(ocp)即是此意。