设计模式之策略模式
策略模式
将一组特定行为和算法封装成类,以适应某些特定的上下文环境。
实现
定义接口
interface Strategy{ public function showShop(); public function showAd(); }
针对不同的对象实现不同的策略。
策略一
class YangMan implements Strategy{ public function showShop() { // TODO: Implement showShop() method. echo '显示年轻人呢的商品'; } public function showAd() { // TODO: Implement showAd() method. echo "针对年轻人做的广告"; } }
策略二
class OldMan implements Strategy{
public function showShop()
{
// TODO: Implement showShop() method.
echo '显示老人呢的商品';
}
public function showAd()
{
// TODO: Implement showAd() method.
echo "针对老人做的广告";
}
实现策略
class StrategyComplete {
protected $strategy;
public function doSomething(){
$this->strategy->showShop();
echo "<br>";
$this->strategy->showAd();
}
public function setStrategy( \Strategy $strategy){
$this->strategy = $strategy;
}
}
$obj = new StrategyComplete();
if($_GET['type']= 'oldman'){
$obj->setStrategy(new OldMan());
}else{
$obj->setStrategy(new OldMan());
}
$obj->doSomething();
小结:上一节是适配器模式,适配器是操作相同的对象,使用不同的方法,以达到兼容问题(操作可选择)。而策略模式是针对不同的对象显示不同东西(有点怀疑这句话),其实根据这个词“策略”,就感觉在谋划什么东西一样。
class OldMan implements Strategy{ public function showShop() { // TODO: Implement showShop() method. echo '显示老人呢的商品'; } public function showAd() { // TODO: Implement showAd() method. echo "针对老人做的广告";}
class StrategyComplete { protected $strategy; public function doSomething(){ $this->strategy->showShop(); echo "<br>"; $this->strategy->showAd(); } public function setStrategy( \Strategy $strategy){ $this->strategy = $strategy; } } $obj = new StrategyComplete(); if($_GET['type']= 'oldman'){ $obj->setStrategy(new OldMan()); }else{ $obj->setStrategy(new OldMan()); } $obj->doSomething();
视频链接免费:http://www.imooc.com/learn/236
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 不到万不得已,千万不要去外包
· C# WebAPI 插件热插拔(持续更新中)
· 会议真的有必要吗?我们产品开发9年了,但从来没开过会
· 【译】我们最喜欢的2024年的 Visual Studio 新功能
· 如何打造一个高并发系统?