本文例子來自鹿鼎記的韋小寶
他是一個八面玲瓏的人,是一個有策略的人,因此才能在本身不一樣的角色轉換自如,符合這個設計模式php
對應於策略設計模式
Context(使用者): 韋小寶
Abstract(抽象策略) : 轉換角色
Strategy(具體策略) : 遇到了康熙,遇到了天地會,遇到了神龍教,分別是什麼角色設計模式
代碼實現測試
抽象策略ui
/** * 身份抽象類 * Interface IDEGREE */ interface IDegree { public function role(); }
使用者類設計
/** * 使用角色 * Class Weixiaobao */ class Wxb { public function role(IDegree $degree){ $degree->role(); } }
具體策略類code
/** * 遇到康熙的身份 * Class Kangxi */ include "IDegree.php"; class Kangxi implements IDegree { public function role() { echo '遇到了康熙,變成小桂子'; } }
/** * 遇到了天地會 * Class Tiandihui */ include "IDegree.php"; class Tiandihui implements IDegree { public function role() { echo '遇到了天地會, 我是韋香主'; } }
/** * 碰見了神龍教 * Class Shenlongjiao */ include "IDegree.php"; class Shenlongjiao implements IDegree { public function role() { echo '遇到了神龍教, 我是白龍使'; } }
測試io
/** * 行走江湖都不怕的韋小寶 */ include_once "Wxb.php"; //include_once "Shenlongjiao.php"; include_once "Tiandihui.php"; $wxb = new Wxb(); //皇上派人去攻打神龍教 //$wxb->role(new Shenlongjiao()); $wxb->role(new Tiandihui());