翻开《韦氏大词典》,我们可以发现术语“多态(polymorphism)”被定义为“可以呈现不同形式的能力或状态”。
而在面向对象编程中,多态是指两个或多个属于不同类型的对象,对同一个消息(方法调用)做出不同响应的能力。
举个通俗的例子,如果我们要求三种人------外科医生、发型师和演员------“cut!”,则
1、外科医生会在病人身上割开一个切口(cut=切开);
2、发型师会开始剪头发(cut=剪);
3、演员会停止表演,等待导演下一步指令(cut=停止拍摄)。
可以把这三种不同职业的人看做属于不同类的对象。每个对象都得到同一个消息-------“cut!”-------但他们知道对于自己来说,这个命令意味着什么,因为他们都清楚自己的职业(类)特征。
其实,稍微认真思考一下,你就会发现,自己早已学到过所有关于c#如何实现多态的知识------即继承加上覆载(override)。继承和覆载合起来实现了多态。所以我们说“多态简化了代码维护”。
看过PetShop的人肯定都非常了解,它是“面向接口编程”思想的集中体现。我们从业务逻辑层的引用程序集中可以看到,BLL模块并没有引用SQLServerDAL和OracleDAL程序集。在业务逻辑层中,有关数据访问层中数据对象的调用,均利用多态原理定义了抽象的接口类型对象,然后利用工厂对象的工厂方法创建具体的数据对象。