php面向对象之策略模式,php策略模式的学习--引自《深入php面向对象模式与实践》...
#策略(Strategy)模式
#定义抽象类 Lesson
abstract class Lesson{
private $duration;
private $coststrategy;#定义属性
public function __construct($duration , CostStrategy $strategy){
#实例化时,传进来一个对象
#用CostStrategy 类来处理 某个行为,而不用调用自身的方法来处理
$this->duration =$duration;
$this->coststrategy = $strategy;
}
public function cost(){
return $this->coststrategy->cost($this); # ??? ??? ??? ??? ??? ??? ??? ??? ???
}
#不是用抽象类的 abstract CostStrategy 类 中的方法 cost 来实现的,
#从输出的值看来 是用的
#TimedCostStrategy
#FixedCostStrategy 中 的方法,所以
# 在实例化对象时,用了
#TimedCostStrategy
#FixedCostStrategy 中 的方法
public function chargeType(){
return $this->coststrategy->chargeType();
}
public function getDuration(){
return $this->duration;
}
}
abstract class CostStrategy{ #抽象类是不能实例化的
abstract function cost( Lesson $lesson); #传入的参数是对象
abstract function chargeType();
}
class TimedCostStrategy extends CostStrategy{
public function cost(Lesson $lesson){
return ($lesson->getDuration()*5);
# 在Lesson 类中,getDuration 的返回值是 return $this->duration;
}
public function chargeType(){
return 'hourly rate!';
}
}
class FixedCostStrategy extends CostStrategy{
function cost(Lesson $lesson){
return 30;
#此处为调用如何方法,只是单纯的返回一个值
}
function chargeType(){
return 'fixed rate';
}
}
#继承类Lesson
class Lecture extends Lesson{
}
#继承类Lesson
class Seminar extends Lesson{
}
#实例化对象
$lessons[] = new Seminar(4,new TimedCostStrategy()); #生成了一个TimeConsTrategy的一个对象
$lessons[]= new Lecture(4 , new FixedCostStrategy());#生成了一个FixedConsTrategy的一个对象
#分别 调用TimeConsTrategy && FixedConsTrategy 中的方法 const() 和 chargeType(),在执行遍历
foreach ($lessons as $lesson) {
# 遍历输出
print "lesson charge {$lesson->cost()}==>>";
print "Charge type: {$lesson->chargeType()}
";
}
以上就介绍了php 策略模式的学习 --引自《深入php面向对象模式与实践》,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。 本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉 本文系统来源:php中文网
php面向对象之策略模式,php策略模式的学习--引自《深入php面向对象模式与实践》...相关推荐
- java状态模式和策略模式_Java状态和策略设计模式之间的差异
java状态模式和策略模式 为了在Core Java应用程序中正确使用状态和策略设计模式,对于Java开发人员清楚地了解它们之间的区别很重要. 尽管状态和策略设计模式的结构相似,并且都基于开放式封闭设 ...
- 打折策略模式java_策略模式(java)
引 GOF <设计模式:可复用面向对象软件设计的基础>中的模式,应当算是模式归纳的鼻祖(并非他们最早发现/使用了模式,而是将已有的模式进行了整合归纳),而我们现在对于模式的学习基本上都是基 ...
- java策略模式(Java策略模式多种返回结果)
Java设计模式的中介者模式是怎样的? 如果对象之间的关系原本一目了然,中介对象的加入便是"画蛇添足". 来看下中介者模式的组成部分吧. 1) 抽象中介者(Mediator)角色: ...
- 设计模式之模板方法模式、策略模式、命令模式、责任链模式、状态模式
前言 本章节给您介绍23种设计模式的行为型模式中的模板方法模式.策略模式.命令模式.责任链模式.状态模式. 如有帮助记得3连 加 关注哦!欢迎品论去留言交流,谢谢阅读! 文章目录 前言 一.模板方法模 ...
- 工厂模式、策略者模式、责任链模式综合应用
设计模式的具体运用: 简单工厂模式.策略者模式.责任链模式定义与使用 classLoader的具体运用 自定义的classloader 来动态加载类 程序功能设计: 在商城购物时,商城可能会在特殊的日 ...
- 行为型模式:策略模式
策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 通俗点,策略模式就是打折 ...
- 我学的是设计模式的视频教程——命令模式vs策略模式,唠嗑
课程视频 命令模式vs策略模式 唠嗑 课程笔记 课程笔记 课程代码 课程代码 新课程火热报名中 课程介绍 版权声明:本文博主原创文章,博客,未经同意不得转载.
- 策略模式和工厂模式的区别_java设计模式之状态模式,策略模式孪生兄弟
状态模式 状态模式(State Pattern)中,类的行为是基于它的状态改变的,状态之间的切换,在状态A执行完毕后自己控制状态指向状态B,状态模式是不停的切换状态执行.这种类型的设计模式属于行为型模 ...
- 委派模式与策略模式综合应用
在上面的代码中我们列举了非常几个业务场景,相信小伙伴对委派模式和策略模式有了非常深刻的理解了.现在,我们再来回顾一下,DispatcherServlet 的委派逻辑,代码如下: private voi ...
最新文章
- 无人驾驶重塑竞争生态圈
- python如何编写excel_如何用Python编写Excel
- springboot:thymeleaf
- MATLAB-循环类型相关(for while break continue)
- 一键导出Origin图片MATLAB代码
- arduino定时器函数如何使用_Excel表格技巧—如何使用DELTA 函数
- 第57课 鸡兔同笼-2021.10.12
- Apache的详细配置
- 剑指offer——25.合并两个排序的链表
- 重学C---------第五节:常量
- Java基础知识之笔记总结分享(超详细)入门必备
- ecshop源码分析-ecshop二次开发
- 【推荐】微信运营书一箩筐,微信运营手册、微信力量
- python xy 3_python(3):文件操作/os库
- linux系统创建桌面快捷方式,linux创建桌面快捷方式
- 未来广告机面临的问题
- hdu4489(递推)
- Conhost.exe是什么进程?为什么会启动运行?图文详解
- 酷炫的数据可视化大屏来了!满足你99%大屏需求
- 在华大半导体的M0+内核HC32L136上移植freertos
热门文章
- mysql的repeat_mysql函数中使用repeat循环的例子
- python逐行读取txt文件readline_Python - 无法读取整个.txt文件:.readlines错误?
- mysql 分页查询几种语法_各数据库2种分页语法支持
- mysql update多个字段_常见的MySQL命令大全fourth
- 表格图片预览_Mac预览工具使用技巧,Mac预览功能实用技巧大全
- C++socket编程(二):系统socket库介绍
- linux下无法删除文件夹,linux服务器下完美解决无法删除虚拟主机文件或文件夹...
- 设计php框架_PHP微型框架设计
- oracle视图可以带日期变量么,创建视图时日期字段如何只都天
- python __enter____exit__(with)