#策略(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面向对象模式与实践》...相关推荐

  1. java状态模式和策略模式_Java状态和策略设计模式之间的差异

    java状态模式和策略模式 为了在Core Java应用程序中正确使用状态和策略设计模式,对于Java开发人员清楚地了解它们之间的区别很重要. 尽管状态和策略设计模式的结构相似,并且都基于开放式封闭设 ...

  2. 打折策略模式java_策略模式(java)

    引 GOF <设计模式:可复用面向对象软件设计的基础>中的模式,应当算是模式归纳的鼻祖(并非他们最早发现/使用了模式,而是将已有的模式进行了整合归纳),而我们现在对于模式的学习基本上都是基 ...

  3. java策略模式(Java策略模式多种返回结果)

    Java设计模式的中介者模式是怎样的? 如果对象之间的关系原本一目了然,中介对象的加入便是"画蛇添足". 来看下中介者模式的组成部分吧. 1) 抽象中介者(Mediator)角色: ...

  4. 设计模式之模板方法模式、策略模式、命令模式、责任链模式、状态模式

    前言 本章节给您介绍23种设计模式的行为型模式中的模板方法模式.策略模式.命令模式.责任链模式.状态模式. 如有帮助记得3连 加 关注哦!欢迎品论去留言交流,谢谢阅读! 文章目录 前言 一.模板方法模 ...

  5. 工厂模式、策略者模式、责任链模式综合应用

    设计模式的具体运用: 简单工厂模式.策略者模式.责任链模式定义与使用 classLoader的具体运用 自定义的classloader 来动态加载类 程序功能设计: 在商城购物时,商城可能会在特殊的日 ...

  6. 行为型模式:策略模式

    策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 通俗点,策略模式就是打折 ...

  7. 我学的是设计模式的视频教程——命令模式vs策略模式,唠嗑

    课程视频 命令模式vs策略模式 唠嗑 课程笔记 课程笔记 课程代码 课程代码 新课程火热报名中 课程介绍 版权声明:本文博主原创文章,博客,未经同意不得转载.

  8. 策略模式和工厂模式的区别_java设计模式之状态模式,策略模式孪生兄弟

    状态模式 状态模式(State Pattern)中,类的行为是基于它的状态改变的,状态之间的切换,在状态A执行完毕后自己控制状态指向状态B,状态模式是不停的切换状态执行.这种类型的设计模式属于行为型模 ...

  9. 委派模式与策略模式综合应用

    在上面的代码中我们列举了非常几个业务场景,相信小伙伴对委派模式和策略模式有了非常深刻的理解了.现在,我们再来回顾一下,DispatcherServlet 的委派逻辑,代码如下: private voi ...

最新文章

  1. 无人驾驶重塑竞争生态圈
  2. python如何编写excel_如何用Python编写Excel
  3. springboot:thymeleaf
  4. MATLAB-循环类型相关(for while break continue)
  5. 一键导出Origin图片MATLAB代码
  6. arduino定时器函数如何使用_Excel表格技巧—如何使用DELTA 函数
  7. 第57课 鸡兔同笼-2021.10.12
  8. Apache的详细配置
  9. 剑指offer——25.合并两个排序的链表
  10. 重学C---------第五节:常量
  11. Java基础知识之笔记总结分享(超详细)入门必备
  12. ecshop源码分析-ecshop二次开发
  13. 【推荐】微信运营书一箩筐,微信运营手册、微信力量
  14. python xy 3_python(3):文件操作/os库
  15. linux系统创建桌面快捷方式,linux创建桌面快捷方式
  16. 未来广告机面临的问题
  17. hdu4489(递推)
  18. Conhost.exe是什么进程?为什么会启动运行?图文详解
  19. 酷炫的数据可视化大屏来了!满足你99%大屏需求
  20. 在华大半导体的M0+内核HC32L136上移植freertos

热门文章

  1. mysql的repeat_mysql函数中使用repeat循环的例子
  2. python逐行读取txt文件readline_Python - 无法读取整个.txt文件:.readlines错误?
  3. mysql 分页查询几种语法_各数据库2种分页语法支持
  4. mysql update多个字段_常见的MySQL命令大全fourth
  5. 表格图片预览_Mac预览工具使用技巧,Mac预览功能实用技巧大全
  6. C++socket编程(二):系统socket库介绍
  7. linux下无法删除文件夹,linux服务器下完美解决无法删除虚拟主机文件或文件夹...
  8. 设计php框架_PHP微型框架设计
  9. oracle视图可以带日期变量么,创建视图时日期字段如何只都天
  10. python __enter____exit__(with)