WEB开发网
开发学院软件开发C语言 漫谈面向对象基石之开闭原则(OCP) 阅读

漫谈面向对象基石之开闭原则(OCP)

 2010-09-30 22:45:17 来源:WEB开发网   
核心提示: 01classProgram02{03staticvoidMain(string[]args)04{05floatsalary=10000;0607Console.WriteLine("收入是{0}的人应缴个税是{1},",salary,GetTax(salary));08}

01 class Program 
02 { 
03     static void Main(string[] args) 
04     { 
05         float salary = 10000; 
06   
07         Console.WriteLine("收入是{0}的人应缴个税是{1},",salary, GetTax(salary)); 
08     } 
09   
10     static float GetTax(float salary) 
11     { 
12         ITaxCalculateStrategy strategy = GetTaxCalculateStrategy(); 
13         return strategy.GetTax(salary);         
14     } 
15   
16     /// <summary> 
17     /// 获得应该使用的个税计算方法 
18     /// </summary> 
19     /// <returns>个税计算方法实现实例</returns> 
20     static ITaxCalculateStrategy GetTaxCalculateStrategy() { 
21         string typeName = ConfigurationManager.AppSettings["TaxCalculateStrategyType"]; 
22         if (string.IsNullOrEmpty(typeName)) 
23             throw new ConfigurationErrorsException("请配置TaxCalculateStrategyType"); 
24   
25         Type type = Type.GetType(typeName); 
26         if (type == null) throw new ConfigurationErrorsException("TaxCalculateStrategyType错误"); 
27   
28         return (ITaxCalculateStrategy)Activator.CreateInstance(type); 
29     } 
30 } 
31   
32 /// <summary> 
33 /// 定义个税计算的接口 
34 /// </summary> 
35 public interface ITaxCalculateStrategy 
36 { 
37     float GetTax(float salary); 
38 } 
39   
40 /// <summary> 
41 /// 两会前个税计算办法的实现 
42 /// </summary> 
43 public class TaxCalculateBefore2Conference : ITaxCalculateStrategy 
44 { 
45     float ITaxCalculateStrategy.GetTax(float salary) 
46     { 
47         return (float)(salary * 0.03); 
48     } 
49 } 
50   
51 /// <summary> 
52 /// 两会后个税的计算方法 
53 /// </summary> 
54 public class TaxCalculateAfter2Conference:ITaxCalculateStrategy 
55 { 
56     float ITaxCalculateStrategy.GetTax(float salary) 
57     { 
58         return (float)(salary * 0.020); 
59     } 
60 } 

因为要少缴税,所以我很愉快的重构了之前的代码,可以转眼两会开完了,结果并非如我预期的个税变化,咋办呢?没关系我们重新开发一个个税计算方法,修改下配置就可以仍旧使用之前的个税计算办法了。

开闭原则实现的关键点在于抽象,也许我们刚开始不知道该把那部分抽象出来,但是这并不是问题,我们可以遵循简单设计的原则,当变化来了的时候,再重构代码,做到一种满足开闭原则的设计。

切忌到处都抽象,如果到处都抽象就会导致系统过度设计,过度复杂。这反而是不利于系统的维护。完全的开闭原则是不可能实现的,所以请保持简单设计,在需要的时候做符合开闭原则的设计。

上一页  1 2 3 

Tags:漫谈 面向 对象

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接