代码整洁之道-对象和数据结构
生活随笔
收集整理的這篇文章主要介紹了
代码整洁之道-对象和数据结构
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
現(xiàn)在,有一個(gè)計(jì)算面積的需求,其中一種實(shí)現(xiàn)如下:
class Square{public $side; } class Geometry{public function area($shape){if($shape instanceof Square){return $shape->side * $shape->side;}return 0;} }有人看了,你這抽象的有問題啊,很明顯是面向過程的,如果新加一個(gè)類型,Geometry類中的所有方法都要修改。嗯,卻是是這樣,但反過來想,如果新加一個(gè)方法,所有現(xiàn)有的形狀類都不用動(dòng),只要在Geometry類中添加方法就行了。
當(dāng)然了,還有一種多態(tài)的實(shí)現(xiàn)方式:
class Square implements Shape{private $side;public function area(){return $this->side * $this->side;} }你以為這樣就萬事大吉了?并沒有。確實(shí)這樣實(shí)現(xiàn),添加新的類型,只要新鞋一個(gè)類實(shí)現(xiàn)方法即可,很簡(jiǎn)單。但是如果要添加一個(gè)新的函數(shù),那不好意思,所有的類都要進(jìn)行修改。
簡(jiǎn)單總結(jié)下,就是說:
- 過程式代碼便于在不改動(dòng)現(xiàn)由數(shù)據(jù)結(jié)構(gòu)的前提下添加新的函數(shù),面向?qū)ο蟊阌谠诓桓膭?dòng)現(xiàn)由函數(shù)的前提先添加新的類型
- 過程式代碼難以添加新的數(shù)據(jù)結(jié)構(gòu),因?yàn)楸仨毿薷乃泻瘮?shù)。面向?qū)ο蟠a難以添加新函數(shù),因?yàn)楸仨毿薷乃蓄?/strong>
- 對(duì)象暴露行為,隱藏?cái)?shù)據(jù)。便于添加新的數(shù)據(jù)類型而無需修改現(xiàn)有行為,同時(shí)也難以在現(xiàn)有對(duì)象中添加新的行為
- 數(shù)據(jù)結(jié)構(gòu)(上面的第一種實(shí)現(xiàn))暴露數(shù)據(jù),沒有明顯的行為。便于向現(xiàn)有數(shù)據(jù)結(jié)構(gòu)添加新行為,同時(shí)也難以向現(xiàn)有函數(shù)添加新的數(shù)據(jù)結(jié)構(gòu)。
當(dāng)然,具體使用哪一種還是應(yīng)該靈活選擇,不必拘泥。
如果希望靈活添加新行為,就使用數(shù)據(jù)結(jié)構(gòu)的方式。如果希望靈活添加新類型,就使用面向?qū)ο蟮姆绞健?/p>
總結(jié)
以上是生活随笔為你收集整理的代码整洁之道-对象和数据结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HBase 数据存储结构
- 下一篇: 数据压缩算法