# 策略模式
* * * * *
說明:
> 將一組特定的行為和算法封裝成類,以適應某些特定的上下文環境,用意是對一組算法的封裝。動態的選擇需要的算法并使用
適用場景:
1、 多個類只區別在表現行為不同,可以使用Strategy模式,在運行時動態選擇具體要執行的行為。
2、 需要在不同情況下使用不同的策略(算法),或者策略還可能在未來用其它方式來實現。
3、 對客戶隱藏具體策略(算法)的實現細節,彼此完全獨立。
4、客戶端必須知道所有的策略類,并自行決定使用哪一個策略類,策略模式只適用于客戶端知道所有的算法或行為的情況。
5、 策略模式造成很多的策略類,每個具體策略類都會產生一個新類。
實例:
~~~
<?php
abstract class baseAgent { //抽象策略類
abstract function PrintPage();
}
//用于客戶端是IE時調用的類(環境角色)
class ieAgent extends baseAgent {
function PrintPage() {
return 'IE';
}
}
//用于客戶端不是IE時調用的類(環境角色)
class otherAgent extends baseAgent {
function PrintPage() {
return 'not IE';
}
}
class Browser { //具體策略角色
public function call($object) {
return $object->PrintPage ();
}
}
$bro = new Browser ();
echo $bro->call ( new ieAgent () );
?>
~~~
資料來源:
https://www.cnblogs.com/yangjinjin/archive/2013/01/31/2887498.html
https://blog.csdn.net/flitrue/article/details/52614599
https://blog.csdn.net/jhq0113/article/details/45771863
- 前言
- 函數參考
- Socket 函數
- socket_accept
- socket_bind
- socket_clear_error
- socket_close
- socket_connect
- socket_create_listen
- socket_create_pair
- socket_create
- socket_getpeername
- socket_getsockname
- socket_last_error
- socket_listen
- socket_read
- socket_recv
- socket_select
- socket_send
- socket_set_block
- socket_set_nonblock
- SplQueue
- 魔術方法
- 魔術常量
- 雜項
- backlog的用處
- new self()和new static()的區別
- PHP變量的生命周期
- PHP抽象類
- 對象接口
- PHP中的常用關鍵字
- 常量
- 內存泄露
- global 與 $GLOBAL
- 簡單說明CGI和動態請求是什么
- 設計模式
- 單例模式
- 工廠模式
- 適配器模式
- 策略模式
- 觀察者模式
- 控制反轉IoC簡介
- session
- use_trans_sid
- auto_start
- session_id
- cookie_secure
- 面試
- 數據庫相關
- 語句相關
- 索引相關
- 字段相關
- PHP相關
- 字符串相關
- 函數相關
- 運算符優先級相關
- 錯誤相關
- redis相關
- 10個常見的Redis面試"刁難"問題
- mysql
- MySQL中的鎖
- MySQL存儲引擎MyISAM 和 InnoDB的區別
- MySQL半同步復制
- explain 命令詳解
- 索引
- 數據庫事務
- MySQL和B樹的那些事
- git
- github----向開源框架提交pr的過程
- 推薦博客
- linux
- 命令
- free
- 高并發
- 搶購/秒殺功能
- 算法
- 一致性Hash算法