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

一、总结

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

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

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

就是普通的->执行方法: return $this->fanCreateor->fan();
 83 class FD {
84 protected $fanCreateor = null;
85 protected $caiCreateor = null;
86 protected $tangCreateor = null;
87
88 public function __construct($f,$c,$t) {
89 $this->fanCreateor = $f;
90 $this->caiCreateor = $c;
91 $this->tangCreateor = $t;
92 }
93
94 public function createFan() {
95 return $this->fanCreateor->fan();
96 }
97
98 public function createCai() {
99 return $this->caiCreateor->cai();
100 }
101
102 public function createTang() {
103 return $this->tangCreateor->tang();
104 }
105 }
106
107
108 $fd = new FD(new NorthCook() , new NorthCook() , new SouthCook);

2、编程的灵活性原则?

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

二、策略模式如何使用

1、代码

 <?php
/*
// 做一饭店
class FanDian {
public function fan() {
return '面条';
} public function cai() {
return '炒菜';
} public function tang() {
return '蛋花汤';
}
} class SouthDian {
public function fan() {
return '大米饭';
} public function cai() {
return '烧菜+奶油';
} public function tang() {
return '海鲜汤';
}
} class BjDian {
public function fan() {
return '大米饭';
} public function cai() {
return '炒菜';
} public function tang() {
return null;
}
} $fd = new FanDian();
echo $fd->tang(); */ class NorthCook {
public function fan() {
return '面条';
} public function cai() {
return '炒菜';
} public function tang() {
return '蛋花汤';
}
} class SouthCook {
public function fan() {
return '米饭';
} public function cai() {
return '烧菜+奶油';
} public function tang() {
return '海鲜汤';
}
} class FD {
protected $fanCreateor = null;
protected $caiCreateor = null;
protected $tangCreateor = null; public function __construct($f,$c,$t) {
$this->fanCreateor = $f;
$this->caiCreateor = $c;
$this->tangCreateor = $t;
} public function createFan() {
return $this->fanCreateor->fan();
} public function createCai() {
return $this->caiCreateor->cai();
} public function createTang() {
return $this->tangCreateor->tang();
}
} $fd = new FD(new NorthCook() , new NorthCook() , new SouthCook); echo $fd->createFan() , "<br>";
echo $fd->createTang() , "<br />"; ?>
 

最新文章

  1. MySQL目录
  2. 让Fiddler能够检测到localhost的http数据
  3. R语言与正态性检验
  4. [转].net 使用NPOI或MyXls把DataTable导出到Excel
  5. Struts2 - Interceptor中取得ActionName、Namespace、Method
  6. object does not contain a definition for get_range
  7. 项目经验之:GIS的初步工作窗体的搭建
  8. 关于Visual Studio中的TraceDebugging文件夹
  9. C语言,如何产生随机数
  10. 说说读卡应用那点事儿,以SCL010为例
  11. MVC test
  12. bootstrap3 响应式布局栅格式布局
  13. 【有意思的BUG】浏览器的Title和Icon
  14. phpstorm+wamp+xdebug配置php调试环境
  15. Java对正则表达式的支持(一)
  16. error: ‘module’ object has no attribute ‘_rebuild_tensor_v2’
  17. vue(一)使用vue-cli搭建项目
  18. CSS三种插入样式表格式
  19. Rendering with Replaced Shaders
  20. Luogu 3385 负环 | 我有特别的SPFA技巧

热门文章

  1. ipmi 最新和MegaCli 监控磁盘和raid信息
  2. rsync客户端命令使用简介
  3. 在eclipse创建和myeclipse一样结构的web项目
  4. 把flask部署到服务器
  5. Linux 在不重启的情况下识别新挂载的磁盘
  6. UISegmentedControl 功能简单 分析
  7. STM32F103RCT6移植到STM32F103C8T6注意事项
  8. 智能家居DIY-空气质量检测篇-获取温度和湿度篇
  9. Zookeeper Curator 事件监听 - 秒懂
  10. PoC简介