标签:修改 面向 style 面向过程 过程 geo square 隐藏数据 行修改
现在,有一个计算面积的需求,其中一种实现如下:
class Square{ public $side; } class Geometry{ public function area($shape){ if($shape instanceof Square){ return $shape->side * $shape->side; } return 0; } }
有人看了,你这抽象的有问题啊,很明显是面向过程的,如果新加一个类型,Geometry类中的所有方法都要修改。嗯,却是是这样,但反过来想,如果新加一个方法,所有现有的形状类都不用动,只要在Geometry类中添加方法就行了。
当然了,还有一种多态的实现方式:
class Square implements Shape{ private $side; public function area(){ return $this->side * $this->side; } }
你以为这样就万事大吉了?并没有。确实这样实现,添加新的类型,只要新鞋一个类实现方法即可,很简单。但是如果要添加一个新的函数,那不好意思,所有的类都要进行修改。
简单总结下,就是说:
当然,具体使用哪一种还是应该灵活选择,不必拘泥。
如果希望灵活添加新行为,就使用数据结构的方式。如果希望灵活添加新类型,就使用面向对象的方式。
标签:修改 面向 style 面向过程 过程 geo square 隐藏数据 行修改
原文地址:https://www.cnblogs.com/hujingnb/p/11568721.html