## **策略模式**
策略模式指的是程序中涉及決策控制的一種模式,是一組算法的封裝,動態選擇需要的算法并使用。
## 策略模式的三種角色
抽象策略角色
具體策略角色
環境角色(對抽象策略角色的引用)
## 策略模式實現步驟
1.定義抽象角色類(定義好各個實現的共同抽象方法)
2.定義具體策略類(具體實現父類的共同方法)
3.定義環境角色類(傳入抽象角色類,調用抽象策略類方法)
策略模式,生活中的實例:
例如下班回家,我可以有幾個策略考慮:我可以騎單車,乘坐公交車,乘地鐵等策略
還比如網站開發個人中心頁面,不同的用戶類型顯示個人主頁不一樣,這個可以使用策略模式,即針對不同的用戶使用不同的策略。
## 策略模式設計代碼實現
~~~
//抽象策略類
abstract class BaseUserStratege{
abstract public function center();//個人中心
}
//具體策略普通用戶策略
class CommonUserStratege extends BaseUserStratege{
public function center()
{
echo 'common user center';
}
}
//具體策略VIP用戶策略
class VipUserStratege extends BaseUserStratege{
public function center()
{
echo 'vip user center';
}
}
//環境角色,對抽象策略類的引用
class UserStrategeContext{
private $baseUserStratege = null;
public function __construct($baseUserStratege)
{
$this->baseUser = $baseUser;
}
public function center(){
return $this->baseUserStratege->center();
}
}
//根據不同用戶類型創建不同的具體決策類,比如vip用戶,就創建VipUser策略
$user = new VipUserStratege();
$userStrategeContext = new UserStrategeContext($user);
$userStrategeContext->center();
~~~
- PHP篇
- 函數傳值和傳引用的區別
- 簡述PHP的垃圾回收機制
- 簡述CGI、FAST-CGI、PHP-FPM的關系
- 常見正則表達式
- 多進程寫文件,如何保證都寫成功
- php支持回調函數的數組函數
- MySQL篇
- MySQL的兩種存儲引擎區別
- 事務的四大特性
- 數據庫事務隔離級別
- 什么是索引
- 索引有哪些數據結構,優缺點
- 索引的一些潛規則
- SQL的優化方案
- 簡述MySQL的鎖機制
- 死鎖是怎么產生的?怎么解決?
- 簡述MySQL的主從復制過程,延遲問題怎么解決
- 分布式事務的解決方案
- 數據庫中間件MyCat
- Linux篇
- Linux常用命令
- 對日志文件的IP出現的次數進行統計,并顯示次數最多的前5名
- WEB篇
- 跨域是怎么產生的,如何解決跨域
- Redis篇
- redis介紹
- redis和memcached區別
- redis的持久化方案
- 緩存穿透、擊穿、雪崩、預熱、更新、降級
- 網絡篇
- 計算機網絡體系結構
- 簡述TCP的三次握手、四次揮手過程
- UDP、TCP 區別,適用場景
- HTTP常見狀態碼含義
- 設計模式篇
- 單例模式
- 簡單工廠模式
- 抽象工廠模式
- 觀察者模式
- 策略模式
- 注冊模式
- 適配器模式
- 安全篇
- 跨站腳本攻擊(XSS)
- 跨站點請求偽造(CSRF)
- SQL 注入
- 應用層拒絕服務攻擊
- PHP安全
- 運維篇
- docker面試題
- 消息隊列篇
- 架構篇
- 數據結構與算法篇