php设计模式课程---6、策略模式如何使用

一、总结

一句话总结:比如代码需求,做一饭店,有南北方不同菜系,不同分店有不同的饭菜汤的需求,代码怎么设计

从饭店有特色过渡到厨师有特色(南方厨师(南方饭,南方菜,南方汤),北方厨师(北方饭,北方菜,北方汤))
利用厨师的组合实现饭店有不同特色(满足不同分店的需求)

1、传入的参数是对象,执行对象的方法如何实现?

就是普通的->执行方法: return $this->fanCreateor->fan();
  1. 83 class FD {
  2. 84 protected $fanCreateor = null;
  3. 85 protected $caiCreateor = null;
  4. 86 protected $tangCreateor = null;
  5. 87
  6. 88 public function __construct($f,$c,$t) {
  7. 89 $this->fanCreateor = $f;
  8. 90 $this->caiCreateor = $c;
  9. 91 $this->tangCreateor = $t;
  10. 92 }
  11. 93
  12. 94 public function createFan() {
  13. 95 return $this->fanCreateor->fan();
  14. 96 }
  15. 97
  16. 98 public function createCai() {
  17. 99 return $this->caiCreateor->cai();
  18. 100 }
  19. 101
  20. 102 public function createTang() {
  21. 103 return $this->tangCreateor->tang();
  22. 104 }
  23. 105 }
  24. 106
  25. 107
  26. 108 $fd = new FD(new NorthCook() , new NorthCook() , new SouthCook);

2、编程的灵活性原则?

有什么 比 是什么  更灵活
组合 比  继承更灵活

二、策略模式如何使用

1、代码

  1. <?php
  2. /*
  3. // 做一饭店
  4. class FanDian {
  5. public function fan() {
  6. return '面条';
  7. }
  8.  
  9. public function cai() {
  10. return '炒菜';
  11. }
  12.  
  13. public function tang() {
  14. return '蛋花汤';
  15. }
  16. }
  17.  
  18. class SouthDian {
  19. public function fan() {
  20. return '大米饭';
  21. }
  22.  
  23. public function cai() {
  24. return '烧菜+奶油';
  25. }
  26.  
  27. public function tang() {
  28. return '海鲜汤';
  29. }
  30. }
  31.  
  32. class BjDian {
  33. public function fan() {
  34. return '大米饭';
  35. }
  36.  
  37. public function cai() {
  38. return '炒菜';
  39. }
  40.  
  41. public function tang() {
  42. return null;
  43. }
  44. }
  45.  
  46. $fd = new FanDian();
  47. echo $fd->tang();
  48.  
  49. */
  50.  
  51. class NorthCook {
  52. public function fan() {
  53. return '面条';
  54. }
  55.  
  56. public function cai() {
  57. return '炒菜';
  58. }
  59.  
  60. public function tang() {
  61. return '蛋花汤';
  62. }
  63. }
  64.  
  65. class SouthCook {
  66. public function fan() {
  67. return '米饭';
  68. }
  69.  
  70. public function cai() {
  71. return '烧菜+奶油';
  72. }
  73.  
  74. public function tang() {
  75. return '海鲜汤';
  76. }
  77. }
  78.  
  79. class FD {
  80. protected $fanCreateor = null;
  81. protected $caiCreateor = null;
  82. protected $tangCreateor = null;
  83.  
  84. public function __construct($f,$c,$t) {
  85. $this->fanCreateor = $f;
  86. $this->caiCreateor = $c;
  87. $this->tangCreateor = $t;
  88. }
  89.  
  90. public function createFan() {
  91. return $this->fanCreateor->fan();
  92. }
  93.  
  94. public function createCai() {
  95. return $this->caiCreateor->cai();
  96. }
  97.  
  98. public function createTang() {
  99. return $this->tangCreateor->tang();
  100. }
  101. }
  102.  
  103. $fd = new FD(new NorthCook() , new NorthCook() , new SouthCook);
  104.  
  105. echo $fd->createFan() , "<br>";
  106. echo $fd->createTang() , "<br />";
  107.  
  108. ?>
 

php设计模式课程---6、策略模式如何使用的更多相关文章

  1. 【转】设计模式 ( 十八 ) 策略模式Strategy(对象行为型)

    设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成 ...

  2. 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)

    设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也经常遇到类似的情况,实现某一个功能有多种算法或者策略,我们能够依据环境或者条件的不同选择不同的算法或者策略来完毕 ...

  3. 《Head First 设计模式》[01] 策略模式

    <Head First 设计模式>(点击查看详情) 1.写在前面的话 之前在列书单的时候,看网友对于设计模式的推荐里说,设计模式的书类别都大同小异,于是自己就选择了Head First系列 ...

  4. javascript设计模式--策略模式

    javascript策略模式总结 1.什么是策略模式? 策略模式的定义是:定义一系列的算法,把他们独立封装起来,并且可以相互替换. 例如我们需要写一段代码来计算员工的奖金.当绩效为a时,奖金为工资的5 ...

  5. [head first 设计模式] 第一章 策略模式

    [head first 设计模式] 第一章 策略模式 让我们先从一个简单的鸭子模拟器开始讲起. 假设有个简单的鸭子模拟器,游戏中会出现各种鸭子,此系统的原始设计如下,设计了一个鸭子超类,并让各种鸭子继 ...

  6. Python设计模式: 最佳的"策略"模式实践代码

    Python设计模式: 最佳的"策略"模式实践代码 今天抽空看了下流畅的python,发现里面介绍了不少python自带的库的使用实例,用起来非常的优雅. 平时用Python来写爬 ...

  7. [设计模式] javascript 之 策略模式

    策略模式说明 定义: 封装一系列的算法,使得他们之间可以相互替换,本模式使用算法独立于使用它的客户的变化. 说明:策略模式,是一种组织算法的模式,核心不在于算法,而在于组织一系列的算法,并且如何去使用 ...

  8. 设计模式:Strategy 策略模式 -- 行为型

    设计模式 策略模式Strategy(对象行为型) 这是几年前写的文字(转载做的笔记更准确些),发觉还是废话多了点. 其实,核心就是5.结构中的UML图 5.1 和 5.2(新增).现在看这张图就觉得一 ...

  9. 设计模式浅谈----策略模式(c#及java实现)

    一.何为策略模式 策略模式是行为型模式的一种,主要用于需要使用不同的算法来处理不同的数据对象时使用,是一种可以在运行时选择算法的设计模式.也称为政策模式. 主要解决:在有多种算法相似的情况下,使用 i ...

  10. JavaScript设计模式 Item 7 --策略模式Strategy

    1.策略模式的定义 何为策略?比如我们要去某个地方旅游,可以根据具体的实际情况来选择出行的线路. 如果没有时间但是不在乎钱,可以选择坐飞机. 如果没有钱,可以选择坐大巴或者火车. 如果再穷一点,可以选 ...

随机推荐

  1. 启动avd Android模拟器缓慢 HAXM自动安装失败

    问题1.更新Android sdk镜像,腾讯镜像地址 android-mirror.bugly.qq.com 使用方法如图 问题2.自动更新HAXM失败解决方法 手动下载地址 http://softw ...

  2. java多线程编码注意事项

    Sole purpose of using concurrency is to produce scalable and faster program. But always remember, sp ...

  3. distcc加速内核编译

    Linux内核编译实在是费时间的事,搞内核移植的时候总要编译,生命有一部分就浪费在等内核编译完成上,有心想买个HP的工作站,看了下Z840的价格,想想还是算了.distcc早就听说过,一直没有去试试, ...

  4. [译]GLUT教程 - 初始化

    Lighthouse3d.com >> GLUT Tutorial >> Basics >> Initialization 这一节开始从main函数入手.第一步是线 ...

  5. [转]postman 官方文档解说

    1. 安装 两种安装方式,我热衷于以chrome插件形式安装 Chrome插件 Mac App 2. 发送请求 Postman最基础的功能就是发送http请求,支持GET/PUT/POST/DELET ...

  6. 如何创建AnjularJS项目

    第一步:命名空间 var applyAppModule=angular.module('apply-app' ,[]);    第二步:控制器 ng-controller="ApplyCon ...

  7. cg语言的一些术语

    在Cg中,用uniform修饰符声明一个参数表明它的值是由外部的数据源初始化的,而且在给定这批向量的处理中保持不变. Uniform inputs,表示一些与三维渲染有关的离散信息数据,这些数据通常由 ...

  8. ios 手势返回<1>

    极其简单取巧的方法 iOS7之后是有侧滑返回手势功能的.注意,也就是说系统已经定义了一种手势,并且给这个手势已经添加了一个触发方法(重点).但是,系统的这个手势的触发条件是必须从屏幕左边缘开始滑动.我 ...

  9. Paint的setPathEffect(PathEffect effect)、以及Path的具体使用,收益多多!

    Paint的setPathEffect(PathEffect effect).以及Path的具体使用,收益多多! 在这首先申明一下介绍只是为了学习使用 内容都来自:http://www.cnblogs ...

  10. 记录-移动端网页触摸内容滑动js插件

    需求: 在webapp中需要左右滑动手机,移动主页的轮播图.也可用在引导页(欢迎页)的大图左右滑动 可用: 百度:swiper插件 在项目中导入插件,这里只有部分代码,具体百度swiper <l ...