設(shè)計模式的宗旨就是:重用巴帮。
在面向?qū)ο笾蟹校愂怯糜谏蓪ο蟮拇a模版瞬女,而設(shè)計模式是用于解決共性問題的代碼模版。
遵循這樣的模板努潘,我們可以設(shè)快速地設(shè)計出優(yōu)秀的代碼诽偷。
注意坤学,設(shè)計模式只是模板,不是具體的代碼报慕。
它是為了代碼復(fù)用深浮,增加可維護性。
在學(xué)習(xí)設(shè)計模式的時候眠冈,有幾個概念讓我很難接受飞苇,這可能是從過程式編程轉(zhuǎn)到面向?qū)ο缶幊痰慕d。
假設(shè)有這樣一個對象:
classPerson{private$name ='Human';publicfunctiongetName(){return$this->name;? ? }}
不要覺得變量只能保存整形數(shù)字蜗顽,數(shù)組和字符串布卡,變量還可以保存對象的:
$man =newPerson;echo$man->getName();
如果另一個類用到了Person類的屬性或方法,那直接穿進去就可以了:
classStudent{publicfunction__construct($person){echo$person->getName();? ? }}// 傳遞對象诫舅,最后輸出字符串“Human”$jack =newStudent(newPerson);
但是這樣有一個小問題羽利,當(dāng)傳遞給newStudent()不是一個Person對象時宫患,如下刊懈,
$jack =newStudent('abc');
程序就會報錯。于是有了第三種做法娃闲,限定參數(shù)的類型虚汛。
在傳遞參數(shù)的時候,就限定參數(shù)的類型皇帮,這樣寫:
classStudent{publicfunction__construct(Person$person){echo$person->getName();? ? }}// 傳遞對象卷哩,$jack =newStudent(newPerson);
這樣,傳給newStudent()的參數(shù)必須是Person的實例属拾。
還有一種經(jīng)常用到的做法将谊,就是用一個類的屬性保存對象或?qū)ο蠹稀H缦拢?/p>
classLife{public$persons = [];publicfunctionaddPerson(Person $person){$this->persons[] = $person;? ? }}$class =newLife();$class->addPerson(newPerson);$class->addPerson(newPerson);var_dump($class->persons);
輸出值:
array(2) {? [0]=>? object(Person)#2 (1) {["name":"Person":private]=>? ? string(5)"Human"}? [1]=>? object(Person)#3 (1) {["name":"Person":private]=>? ? string(5)"Human"}}
面向?qū)ο蟮脑O(shè)計模式都是圍繞上面的情形渐白,做一些組合之后形成的尊浓。
所以,理解類之間關(guān)系才是重點纯衍。
互聯(lián)網(wǎng)+時代栋齿,時刻要保持學(xué)習(xí),攜手千鋒PHP,Dream
It Possible襟诸。