PHP設計模式之組合模式

2022-06-05 13:24:09 字數 2657 閱讀 5118

網際網路公司流行扁平化管理,也就是管理層級盡量少於或者不超過三層,作為乙個底層的碼農,你的ceo和你的職級也就相差3層以內。但是很多傳統企業,則會有非常深的層級關係,從資料結構看,這種按職能進行分組的組織架構非常像一顆樹。而我們今天介紹的組合模式的作用就和這個企業組織架構層級的模式非常類似。

gof定義:將物件組合成樹形結構以表示「部分-整體」的層次結構。composite使得使用者對單個物件和組合物件的使用具有一致性

gof類圖

**實現

abstract class component

abstract public function operation(int $depth);

abstract public function add(component $component);

abstract public function remove(component $component);

}

抽象出來的組合節點宣告,在適當情況下實現所有類的公共介面的預設行為,是所有子節點的父類。

class composite extends component

}public function add(component $component)

public function remove(component $component)}}

public function getchild(int $i)

}

具體的節點實現類,儲存下級節點的引用,定義實際的節點行為。

class leaf extends component

public function remove(component $c)

public function operation(int $depth)

}

葉子節點,沒有子節點的最終節點。

接著文章最開頭的例子來說,在我們的組織架構中,一項任務下達到最底的人員時,會經歷多個層級。我還是比較喜歡傳統一起的企業管理方式。通常是一名總監對應多個主管,一名主管對應多位經理,一位經理對應多位組長,一名組長對應多名員工。當乙個通知下發時,每一層級的工作人員都要做出回應,並將通知繼續下發到下屬員工那裡,同時從下屬**獲得反饋。這樣,我們就不知不覺地在實踐中完成了一次組合模式的應用。突然感覺自己棒棒噠,感覺人生已經到達了巔峰!!

完整**:

簡訊簡訊,這個功能我們可以是翻來覆去的用了。這次也不例外。這一回我們的**後台的功能是要針對不同分站和不同**的使用者進行簡訊的傳送。在這裡,我們依然只關注簡訊傳送這件事兒,我們希望給你不同渠道角色但包含統一行為的使用者,你來進行傳送就行了,這樣的功能似乎並不難吧!

簡訊傳送類圖

完整原始碼:

<?php 

abstract class role

abstract public function add(role $role);

abstract public function remove(role $role);

abstract public function sendmessage();

}class rolemanger extends role

public function remove(role $role)}}

public function sendmessage()

}}class team extends role

public function remove(role $role)

public function sendmessage()

}// root使用者

$root = new rolemanger('**使用者');

$root->add(new team('主站使用者'));

$root->sendmessage();

// 社交版塊

$root2 = new rolemanger('社交版塊');

$managera = new rolemanger('論壇使用者');

$managera->add(new team('北京論壇使用者'));

$managera->add(new team('上海論壇使用者'));

$managerb = new rolemanger('sns使用者');

$managerb->add(new team('北京sns使用者'));

$managerb->add(new team('上海sns使用者'));

$root2->add($managera);

$root2->add($managerb);

$root2->sendmessage();

說明

b站id:48278053

PHP設計模式之組合模式

當我們的乙個物件可能代表乙個單一的實體,或者乙個組合的實體,但是仍然需要通過同樣的方式被使用時,這種情形則適合使用組合模式的設計。組合模式是一種結構型模式。當看了書上的解釋之後,並不是很理解,遂去翻了翻 大化設計模式 以下為原文截圖 看完這本書上的解釋之後也不是很理解,但是能夠進行編碼了,以下為組合...

php 論壇 PHP設計模式之組合模式

網際網路公司流行扁平化管理,也就是管理層級盡量少於或者不超過三層,作為乙個底層的碼農,你的ceo和你的職級也就相差3層以內。但是很多傳統企業,則會有非常深的層級關係,從資料結構看,這種按職能進行分組的組織架構非常像一顆樹。而我們今天介紹的組合模式的作用就和這個企業組織架構層級的模式非常類似。gof定...

PHP 設計模式 組合模式

組合模式 將物件組合成樹形結構來表現 部分 整體 的層次結構。目的 重點 使得客戶以一致的方式處理單個物件以及物件的組合。header content type text html charset utf 8 定義抽象類,抽象方法,方法引數根據 黎克特制替換原則 傳遞父類。abstract clas...