原文詳見:
7、職責鏈模式 (chainof responsibility):
多個物件有機會處理請求,為請求傳送者和接收者解耦。就像銀行裡的取款機,不管那一台都可以取到錢。
好處:簡單化物件隱藏鏈結構,便於新增新職責節點。
弊端:請求可能沒有接受者,或者被多個接收者呼叫,效能降低。
應用場景:處理多種請求。
**實現:
<?php
/** * 優才網公開課示例**
* * 職責鏈模式 chain of responsibility
* * @author 優才網全棧工程師教研組
* @see
*/function output($string)
/**
* 加入在公司裡,如果你的請假時間小於0.5天,那麼只需要向leader打聲招呼就ok了。
如果0.5<=請假天數<=3天,需要先leader打聲招呼,然後部門經理簽字。
如果3《請假天數,需要先leader打聲招呼,然後到部門經理簽字,最後總經經理確認簽字,
如果請假天數超過10天,是任何人都不能批准的。
*/ /**
* */
abstract class handler
protected function _success($request)
abstract function handlerequest($request);
} /**
* 具體處理者角色(concretehandler:president):處理它所負責的請求,可以訪問後繼者,如果可以處理請求則處理,否則將該請求轉給他的後繼者。
* */
class concretehandlerleader extends handler
public function handlerequest($request)
if ($this->_handler instanceof handler)
} } /**
* manager
* */
class concretehandlermanager extends handler
public function handlerequest($request)
if ($this->_handler instanceof handler)
} } class concretehandlergeneralmanager extends handler
public function handlerequest($request)
if ($this->_handler instanceof handler) else
} } /**
* 請假申請
* */
class request
public function setname($name)
public function getname()
public function setday($day)
public function getday()
public function setreason($reason )
public function getreason( )
}
class client
}
client::test();
8、策略模式(strategy):
定義一系列演算法,把每乙個演算法封裝起來,並且使它們可相互替換。就像籃球隊裡的球員,場上的和場下休息的。教練可以讓場上的下來,也可以讓場下的上陣。
好處:定義可重用的一系列演算法和行為,並且消除了if else語句。
弊端:呼叫端必須知道所有策略類。
應用場景:用於物件間的替換。
**實現:
<?php
/** * 優才網公開課示例**
* * 策略模式 strategy
* * @author 優才網全棧工程師教研組
* @see
*/function output($string)
//策略基類介面
inte***ce istrategy
class walkstrategy implements istrategy
}class ridebickstrategy implements istrategy
}class carstrategy implements istrategy
}//選擇策略類context
class context
}class client
}
client::test();
已知模式
1、備忘錄模式(memento):
儲存物件在一時刻的狀態。親,還記得「老師來了記得叫我一下」的同桌的他嗎?
好處:給使用者提供了一種可以恢復狀態的機制。
弊端:消耗資源。
應用場景:用於需要儲存的資料。
**實現:
<?php
/** * 優才網公開課示例**
* * 備忘錄模式 memento
* * @author 優才網全棧工程師教研組
* @see
*/function output($string)
class originator
public function creatememento()
public function restorememento(memento $memento)
public function setstate($state)
public function getstate()
public function showstate()
}class memento
public function getstate()
public function setstate($state)
}class caretaker
public function setmemento(memento $memento)
}class client
}
client::test();
return;
try
$succ = $db->exec($sql_2);
if (!$succ)
$succ = $db->exec($sql_3);
if (!$succ)
$db->commit();
} catch (exception $exp)
深度模式
1、直譯器模式(interpreter):
定義語言的文法,並建立乙個直譯器解釋該語言中的句子。每個用過字典的童鞋都懂滴。
好處:可擴充套件性比較好,靈活性大。
弊端:可能難以維護複雜的文法。
應用場景:用於成對或者一對多的需求中。
2、訪問者模式(visitor):
封裝某些用於作用於某種資料結構中各元素的操作,可以在不改變資料結構的前提下定義作用於這些元素的新操作。如銀行排號機。
弊端:增加新資料結構很困難。
應用場景:排隊,排號。
三、總結
本篇介紹了行為型模式,行為模式涉及到演算法和物件職責間的分配,行為類模式採用繼承機制在類間分派行為,templatemethod和interpreter是類行為模式。行為物件模式使用物件復合而不是繼承,一些行為物件模式描述了一組相互對等的物件如何相互協作以完成其中任何乙個物件都單獨無法完成的任務,如mediator在物件間引入乙個mediator物件提供了松耦合所需的間接性;chain of responsibility提供了更鬆的耦合,它通過一條候選物件鏈隱式的向乙個物件發松請求,可以執行時刻決定哪些候選者參與到鏈中;observer定義並保持了物件間的依賴關係;其它的行為物件模式常將行為封裝封裝在乙個物件中,並將請求指派給它,strategy模式將演算法封裝在物件中,這樣可以方面的改變和指定乙個物件所使用的演算法;command模式將請求封裝在物件中,這樣它就可以作為引數來傳遞,已可以儲存在歷史列表中或以其它方式使用;state模式封裝乙個物件的狀態,使得當這個物件的狀態物件變化時,該物件可改變它的行為;visitor模式封裝分布於多個類之間的行為;而iterator模式則抽象了訪問和遍歷乙個集合中物件的方式。
優才網免費公開課請戳這裡:
/course5/
Php設計模式 行為型模式(一)
原文詳見 一 什麼是行為型模式?行為型模式 就是描述類和物件之間的通訊和職責的。簡而言之,就是類和物件扮演什麼角色,還有怎麼扮演這個角色的問題。二 行為型模式的種類 大體上分為三個大類 常見模式 已知模式 深度模式 常見模式包括 模版方法模式 命令模式 迭代器模式 觀察者模式 中介者模式 狀態模式 ...
設計模式 行為型模式
行為型模式用於描述程式在執行時複雜的流程控制,即描述多個類或物件之間怎樣相互協作共同完成單個物件都無法單獨完成的任務,它涉及演算法與物件間職責的分配。行為型模式分為類行為模式和物件行為模式,前者採用繼承機制來在類間分派行為,後者採用組合或聚合在物件間分配行為。由於組合關係或聚合關係比繼承關係耦合度低...
設計模式(結構型模式 行為型模式)
一 結構型模式 1.介面卡模式 通過乙個具體類把適配者適配到目標介面中,使得原本不相容的那些類可以一起工作。舉個例子 可以把二分查詢和快排 適配者 封裝到乙個dataoperation 目標介面 介面中,再操作adapter 介面卡 來進行操作。adapter quicksort sortobj,b...