從王者榮耀談設計模式
阿新 • • 發佈:2018-12-14
軟體開發中涉及到的設計模式很多,這裡重點討論工作中常見的一些設計模式,圍繞王者榮耀中的場景進行展開。
1:策略模式
策略模式demo
<?php
//1:抽象策略介面:王者榮耀
abstract class kingGlory{
abstract function showTime();
}
//2:具體策略角色
//魯班
class luban extends kingGlory{
public function showTime(){
echo '猥瑣發育,躲坦克後面';
}
}
//王昭君
class wangzhaojun extends kingGlory{
public function showTime(){
echo '冰杖一技能減速,二技能冰住人才開大';
}
}
//東皇太一
class dragon extends kingGlory{
public function showTime(){
echo '保護射手,把大留給對方刺客';
}
}
//小喬
class xiaoqiao extends kingGlory{
public function showTime(){
echo '二技能沒讓對方起飛,不隨便開大入場';
}
}
//以後再上新什麼角色,在這裡擴充套件方法就好。
//3:環境角色:王者峽谷
class canyonKingGlory{
private $canyonKingGlory;
//獲取具體策略
public function getKingGlory($hero){
try{
$strategyReflection = new ReflectionClass($hero);
$this->canyonKingGlory = $strategyReflection->newInstance();
}catch(Exception $e){
throw $e;
}
}
function showTime(){
$this->canyonKingGlory->showTime();
}
}
try{
$hero = empty($_GET['hero']) ? '' : trim($_GET['hero']);
$canyonKingGlory = new canyonKingGlory();
$canyonKingGlory->getKingGlory($hero);
$canyonKingGlory->showTime();
}catch(Exception $e){
print_r($e->getMessage());
}
?>
策略模式組成
- 抽象策略角色: 策略類,通常由一個介面或者抽象類實現。
- 具體策略角色:包裝了相關的演算法和行為。
- 環境角色:持有一個策略類的引用,最終給客戶端呼叫。
- 私有的靜態屬性 (儲存類的例項)
- 私有的構造方法 (防止類外例項化)
- 私有的克隆方法 (防止通過克隆生成物件)
- 公有的靜態方法 (調取這個類相當一個介面 )