大話設計模式 組合模式

2021-06-07 21:38:13 字數 3312 閱讀 5804

abstract class component 

public abstract function add(component $c);

public abstract function remove(component $c);

public abstract function display($depth);

}//葉節點沒有子節點

class leaf extends component

//由於葉子沒有再增加分枝和樹葉,所以add和remove方法實現它沒有意義,但這樣做可以消除葉節點和枝節點物件在抽象層次的區別,他們具備完全一致的介面

public function add(component $c)

public function remove(component $c)

public function display($depth)

}//枝節點

class composite extends component

public function add(component $c)

public function remove(component $c)

public function display($depth) }}

//生成樹根root,根上長出leafa和leafb

$root = new composite('root');

$root->add(new leaf('leaf a'));

$root->add(new leaf('leaf b'));

//根上長出分枝composite x,分枝上也有兩葉 leafxa和leafxb

$comp = new composite('composite x');

$comp->add(new leaf("leaf xa"));

$comp->add(new leaf("leaf xb"));

$root->add($comp);

//在composite x上再長出分枝compositexy,分枝上也有兩葉leafxya和leafxyb

$comp2 = new composite('composite xy');

$comp2->add(new leaf('leaf xya'));

$comp2->add(new leaf('leaf xyb'));

$comp->add($comp2);

$root->add(new leaf('leaf c'));

//根部長出兩葉leafc和leafd,可惜leafd沒長牢,被風吹走了

$leaf = new leaf('leaf d');

$root->add($leaf);

$root->remove($leaf);

//顯示大樹的樣子

//公司類

abstract class company

//增加

public abstract function add(company $c);

//移除

public abstract function remove(company $c);

//顯示

public abstract function display($depth);

//履行職責

public abstract function lineofduty();

}//具體公司類 實現介面 樹枝節點

class concretecompany extends company

public function add(company $c)

public function remove(company $c)

public function display($depth)

} //履行職責

public function lineofduty() }}

//人力資源部

class hrdepartment extends company

public function add(company $c)

public function remove(company $c)

public function display($depth)

public function lineofduty()

}//財務部

class financedepartment extends company

public function add(company $c)

public function remove(company $c)

public function display($depth)

public function lineofduty()

}$root = new concretecompany('北京總公司');

$root->add(new hrdepartment('總公司人力資源部'));

$root->add(new financedepartment('總公司財務部'));

$comp = new concretecompany('上海華東分公司');

$comp->add(new hrdepartment('華東分公司人力資源部'));

$comp->add(new financedepartment('華東分公司財務部'));

$root->add($comp);

$comp1 = new concretecompany('南京辦事處');

$comp1->add(new hrdepartment('南京辦事處人力資源部'));

$comp1->add(new financedepartment('南京辦事處財務部'));

$comp->add($comp1);

$comp2 = new concretecompany('杭州辦事處');

$comp2->add(new hrdepartment('杭州辦事處人力資源部'));

$comp2->add(new financedepartment('杭州辦事處財務部'));

$comp->add($comp2);

echo '結構圖:

';$root->display(1);

echo '職責:

';$root->lineofduty();

大話設計模式 組合模式

前言 在 軟體開發過程中,我們經常會遇到處理簡單物件和復合物件的情況,例如對作業系統中目錄的處理就是這樣的乙個例子,因為目錄可以包括單獨的檔案,也可以包括 資料夾,資料夾又是由檔案組成的,由於簡單物件和復合物件在功能上區別,導致在操作過程中必須區分簡單物件和復合物件,這樣就會導致客戶呼叫帶來不必要的...

大話設計模式 組合模式

一 組合模式 將物件組合成樹形結構以表示 部分 整體 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。二 示例 data public abstract class company public abstract void add company c public abstrac...

大話設計模式之組合模式

將物件組合成樹形結構以表示 部分 整體 的層次結構。組合模式使得使用者對單個物件好人組合物件的使用具有一致性。component為組合中的物件宣告介面,在適當情況下,實現所有類共有介面的預設行為。宣告乙個藉口用於訪問和管理component的子部件 abstractclass component 使...