漫谈面向对象基石之开闭原则(OCP)
2010-09-30 22:45:17 来源:WEB开发网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 }
因为要少缴税,所以我很愉快的重构了之前的代码,可以转眼两会开完了,结果并非如我预期的个税变化,咋办呢?没关系我们重新开发一个个税计算方法,修改下配置就可以仍旧使用之前的个税计算办法了。
开闭原则实现的关键点在于抽象,也许我们刚开始不知道该把那部分抽象出来,但是这并不是问题,我们可以遵循简单设计的原则,当变化来了的时候,再重构代码,做到一种满足开闭原则的设计。
切忌到处都抽象,如果到处都抽象就会导致系统过度设计,过度复杂。这反而是不利于系统的维护。完全的开闭原则是不可能实现的,所以请保持简单设计,在需要的时候做符合开闭原则的设计。
- ››面向对象的JS-私有成员变量实现方式
- ››漫谈面向对象基石之开闭原则(OCP)
- ››面向对象的JavaScript (一、对象基础,使用函数来...
- ››面向对象数据库 db4o 之旅,第 4 部分: 使用 dRS
- ››对象存储不给高性能计算添堵
- ››面向 Java Web 应用程序的 OpenID,第 2 部分: 为...
- ››面向 Java 开发人员的 db4o 指南: 简介和概览
- ››面向 Java 开发人员的 db4o 指南: 查询,更新和一...
- ››面向 Java 开发人员的 db4o 指南: db4o 中的数据库...
- ››面向 Java 开发人员的 db4o 指南: 超越简单对象
- ››面向 Java 开发人员的 db4o 指南: 结构化对象和集...
- ››面向 Java 开发人员的 db4o 指南: 事务、分布和安...
更多精彩
赞助商链接