php 设计模式之策略模式
2024-10-18 07:09:05
策略模式:定义算法,并将其封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
步骤:1、抽象策略角色:定义接口或抽象类
2、具体策略角色:实现该接口(抽象类),即具体的算法实现
3、环境角色:对具体方法的调用
适用场景:1、多个类只是行为方式不用,在操作时动态的选择具体使用的方法(算法)
2、在不同的环境下使用算法,比if {}else{}更具有维护性和扩展性
例子代码如下
<?php
//定义接口 interface FlyBehavior{ public function fly(); } //具体方法实现(例子中有不同的飞行方式) class FlyWithWings implements FlyBehavior{ public function fly(){ echo "Fly With Wings \n"; } } class FlyWithNo implements FlyBehavior{ public function fly(){ echo "Fly With No Wings \n"; } }
//定义鸭子的超类 class Duck{ private $_flyBehavior; public function performFly(){ $this->_flyBehavior->fly(); } public function setFlyBehavior(FlyBehavior $behavior){ $this->_flyBehavior = $behavior; } } //继承超类 class RubberDuck extends Duck{ } // Test Case $duck = new RubberDuck(); /* 想让鸭子用翅膀飞行 */ $duck->setFlyBehavior(new FlyWithWings()); $duck->performFly(); /* 想让鸭子不用翅膀飞行 */ $duck->setFlyBehavior(new FlyWithNo()); $duck->performFly();
初学PHP和设计模式,以上是今天早上所学,不足之处,请多多指教 也欢迎互相交流
最新文章
- 游戏buff设计参见
- 51nod 1150 Logarithm
- 为什么匿名内部类参数必须为final类型(转载)
- Windows API 进程状态信息函数
- 再议Unity 3D
- 408. Valid Word Abbreviation
- C++普通函数与模板函数以及特化函数重载的优先级问题
- 读书笔记(一)—— 浅析浏览器渲染过程和html中的文件加载
- java 连接 postgresql
- MySQL Error--The Table is full
- 13.3SolrCloud集群使用手册之Zookeeper指令
- mysql 不同引擎的比较
- Python爬虫Urllib库的高级用法
- TP3.2整合uplodify文件上传
- Python 将一个列表里面的元素拼接成一个字符串
- GoLand语言快捷键
- 中文乱码—Servlet—SpringMVC
- TED_Topic2:My desperate journey with a human smuggler
- 洛谷P4171 [JSOI2010] 满汉全席 [2-SAT,Tarjan]
- Flume入门——Selector、Chanel等