多态本质是将公共不变的流程固化在父类中,然后在不同子类中实现变化的部分,父类最终调用子类覆盖的父类方法来完成操作。
典型的以电商常见的商品优惠活动为例,因为可能有很多种不同的优惠方式比如满金额减,满金额打折,满件数打折等等。
如果完全不用面向对象,当然也可以实现
F(){
...
switch(优惠活动类型){
case 1: //满金额打折
F1();
case 2:
F2();
case 3:
F3();
}
...
}
F1(){
p1()
p2()
//特殊计算方法
p3()
p4()
}
F2(){
p1()
p2()
//特殊计算方法
p3()
p4()
}
这种方式简单直观,但是每次增加一种优惠方式,都需要修改主方法F,并增加一个Fn方法
假如Fn方法比较繁琐,同时又会有大量类似代码,这种方式在可维护性上,就很成问题了。
通过面向对象可以比较好的解决这个问题
//优惠活动的基类
class FBase(){
p1(){}
p2(){}
p3(){}
p4(){}
//主方法
main(){
p1(