作者: pfeng, email: pfengk@hotmail.com
最近做项目中发现可以使用同一个界面来实现来实现不同的功能块。于是思考如何实现代码复用,加快开发速度。记得面向对象程序设计中有一个概念就是类的多态性。如果利用这个概念应该就可以解决这个问题,但是怎么实现呢?花了不少时间查资料,终于理解了一点点抽象类和派生类的概念和使用方法,感觉这个就是我要找的东西了。不用多想立刻动手试验一下... ok,成功。
将这些概念用于项目中,发现它的设计比用面向过程方式设计要复杂,并且更严谨,在设计过程中花费的时间大大的增加,它更加关注需求、分析和设计。当然它带来的优点是不言而喻的。增加代码复用性,减少代码开发量,减少项目维护成本,好的设计将增加系统的健壮性。
抽象类概念:抽象类不能实例化。抽象类的用途是提供多个派生类可共享的基类的公共定义。例如,类库可以定义一个作为其多个函数的参数的抽象类,并要求程序员使用该库通过创建派生类来提供自己的类实现。
派生类概念:通过继承机制,新类(即派生类)将获取基类的所有非私有数据和行为以及新类为自己定义的所有其他数据或行为。因此,新类具有两个有效类型:新类的类型和它继承的类的类型。
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
1
![None.gif](/Images/OutliningIndicators/None.gif)
2
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
3
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
4
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
5
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
6
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
7
![None.gif](/Images/OutliningIndicators/None.gif)
8
![None.gif](/Images/OutliningIndicators/None.gif)
9
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
10
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
11
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
12
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
13
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
14
![None.gif](/Images/OutliningIndicators/None.gif)
15
![None.gif](/Images/OutliningIndicators/None.gif)
类 B 既是有效的 B,又是有效的 A。访问 B 对象时,可以使用强制转换操作将其转换为 A 对象。强制转换不会更改 B 对象,但您的 B 对象视图将限制为 A 的数据和行为。将 B 强制转换为 A 后,可以将该 A 重新强制转换为 B。如果将类 B 作为 B 类型访问,则可以同时获得类 A 和类 B 的数据和行为。对象可以表示多个类型的能力称为多态性。
通过对这些概念的理解,将界面规划为表示层,业务处理规划为业务逻辑层,数据库操作的部分划为数据操作层。业务逻辑层中定义一个抽象类A,不同功能的业务处理都从A派生。界面表示层定义类型为A的便来变量Ai。进入不同的功能时,new一个对应的派生类,并强制转换为A赋予Ai,界面层的所有操作均调用Ai的方法。这样就简单得实现使用同一个界面来实现不同的功能。以后如果有类似新增加的功能,只需在业务逻辑层中实现一个派生类bx。并在界面中增加一个新实例bix。如果业务逻辑不是非常复杂,仅需要5到10分钟就可以完成这个功能的开发。