php八大設計模式之職責鏈模式

2021-07-29 16:59:14 字數 2011 閱讀 9556

當發生一種事情時,我們需要要對應職責的事物去處理對應的事情。

或者去找最近的類(就是級別最低的)去解決,如果解決不了就順著往上找職責更高的,直到解決為止。

注意:一定是要有乙個職責最高的類,否則會有問題。

例子:

比如某同學罵人,我們要告訴紀委;曠課我們要告訴班長;打架我們要告訴班主任。不同情況對應不同的人,產生的結果也是不同的,在 php 中我們是怎麼實現的呢?
<?php

/*** 假設:

* 罵人:1

* 曠課:2

* 打架:3

*/?>

<?php

//三種情況,該是前台傳過來,這兒用陣列代替了。

$arr=[1,2,3];

//隨機獲得一種情況。

array_push($arr,4);

shuffle($arr);

$pop=array_pop($arr);

echo

$pop;

//紀委類。

class

dis }

//班長類。

class

monitor

}//班主任類。

class

headmaster

}if($pop==1)else

if($pop==2)else

?>

<?php

header("content-type:text/html;charset=utf8");

/*** 責任鏈模式完成舉報功能。

* 每個物件儲存著自己的許可權以及上一級的引用,如果自己處理不了,交給上一級。

*///應該前台傳值過來,這裡陣列代替。

$arr=[1,2,3];

//隨機打亂陣列,保證隨機性。

shuffle($arr);

//獲得陣列最後乙個值。

$pop=array_pop($arr);

class

diselse}}

class

monitorelse}}

class

headmaster

}//發生事情去找最近的職責人。

$gos= new dis();

$gos->go($pop);

?>

<?php

header("content-type:text/html;charset=utf8");

/*** 我認為責任鏈沒有很好的擴充套件性,在增加新的對應職責人員時,需要修改舊的**,不符合「開閉原則」。

* 也可以這樣實現:

*///應該前台傳值過來,這裡陣列代替。

$arr=[1,2,3];

//將管理納入乙個管理組【預設】。

$roots=['dis','monitor','headmaster'];

//紀委類。

class

dis }

//班長類。

class

monitor

}//班主任類。

class

headmaster

}//假如新增乙個主任類。

class

director

}//將主任類納入管理組。

array_push($roots,"director");

//將事態納入事態組。

array_push($arr,4);

//隨機打亂陣列,保證隨機性。

shuffle($arr);

//獲得陣列最後乙個值。

//去找對應職責的人。

$pop=array_pop($arr);

$news=new

$roots[$pop-1];

$news->go();

?>

php八大設計模式之工廠模式

簡單點來說,就是用到什麼類,就去例項化對應的類。比如 php 可能連線 mysql,可能連線 sqlserver,也可能是 oracle 資料庫,可以動態的去鏈結。書籍來,看實際 比如我們在 like 目錄下有一些鏈結資料庫的類 like mysql.php class mysql like ora...

php八大設計模式之工廠模式

簡單點來說,就是用到什麼類,就去例項化對應的類。比如 php 可能連線 mysql,可能連線 sqlserver,也可能是 oracle 資料庫,可以動態的去鏈結。書籍來,看實際 比如我們在 like 目錄下有一些鏈結資料庫的類 like mysql.php class mysql like ora...

php八大設計模式之橋接模式

乙個抽象產生多種具體的實現方式,單純的通過子類繼承會有子類 過多的子類產生 的現象,系統需要它們之間進行動態耦合。header content type text html charset utf8 在乙個 中,我們都有給使用者發通知訊息的情況。比如有站內傳送 郵箱傳送 及簡訊傳送等等。面向過程形式...