• 简单工厂
<?php
# 简单工厂
abstract class mycoach
{
public function __construct(){}
} class cultivatecpc extends mycoach{
public function __construct(){
echo "把陈培昌培养为搏击教练"."\n";
}
} class cultivatecj extends mycoach{
public function __construct(){
echo "把程劲培养为搏击教练"."\n";
}
} class martialclub
{
public function cultivate($name)
{
switch($name){
case 'cj':
return new cultivatecj();
case 'cpc':
return new cultivatecpc();
default:
echo '培养一个小教练'."\n";
break;
}
return null;
}
}
class clubmaster{
public function cultivate()
{
$myclub = new martialclub();
$myclub->cultivate('cj');
$myclub = new martialclub();
$myclub->cultivate('cpc');
}
} $mymaster = new clubmaster();
$mymaster->cultivate();

输出结果:

把程劲培养为搏击教练
把陈培昌培养为搏击教练
  • (复杂)工厂
<?php
abstract class mycoach
{
public function __construct()
{}
} class cpc extends mycoach
{
public function __construct()
{
echo "培养出了搏击教练昌仔"."\n";
}
} class cj extends mycoach
{
public function __construct()
{
echo "培养出了搏击教练劲儿弟弟"."\n";
}
} interface cultivate{
function cultivate();
} class cultivatecpc implements cultivate
{
public function cultivate()
{
return new cpc();
}
} class cultivatecj implements cultivate
{
public function cultivate()
{
return new cj();
}
} class coach{
public function __construct()
{
$coach = new cultivatecpc();
$coach->cultivate(); $coach = new cultivatecj();
$coach->cultivate();
}
} $littlecoach = new coach();

输出结果:

培养出了搏击教练昌仔
培养出了搏击教练劲儿弟弟
  • 观察者模式
<?php
class watcher
{
private $name;
public function __construct($myname){
$this->name=$myname;
}
public function update($food)
{
switch($food)
{
case '奶油蛋糕':
echo $food."上桌了,".$this->name.'取出了一份纸盘子和塑料叉子,切了一块'."\n";
break;
case '烤鸭':
echo $food."上桌了,".$this->name.'取了张薄饼,夹了些许葱丝,刷了些甜面酱'."\n";
break;
default:
echo $food."上桌了,".$this->name."赶紧加了两筷子"."\n";
break;
}
return null;
}
} class watchee
{
private $watchlist = [];
public function addwatcher($watcher)
{
$this->watchlist[]=$watcher;
}
public function removewatcher($watcher)
{
$target = array_search($watcher,$this->watchlist);
$target = (int)$target;
unset($this->watchlist[$target]);
//echo $target."\n";
}
public function loaddish($dishname)
{
$this->notify($dishname);
}
public function notify($dishname)
{
      #这里推荐用foreach循环,for循环带来的陷阱是,如果以数字为索引,执行removewatcher方法后,有些索引就没了,访问不到就会报错
    foreach($this->watchlist as $k=>$v)
{
$this->watchlist[$k]->update($dishname);
}
} } $cpc = new watcher('陈培昌');
$cj = new watcher('程劲');
$observee = new watchee();
$observee->addwatcher($cpc);
$observee->addwatcher($cj);
$observee->loaddish('葱香四川凉面');
$observee->removewatcher($cj);
$observee->loaddish('奶油蛋糕');
$xxd = new watcher('徐晓冬');
$observee->addwatcher($xxd);
$observee->loaddish('避风塘茄子');

输出结果:

葱香四川凉面上桌了,陈培昌赶紧加了两筷子
葱香四川凉面上桌了,程劲赶紧加了两筷子
奶油蛋糕上桌了,陈培昌取出了一份纸盘子和塑料叉子,切了一块
避风塘茄子上桌了,陈培昌赶紧加了两筷子
避风塘茄子上桌了,徐晓冬赶紧加了两筷子

最新文章

  1. Debian8安装Vim8
  2. ToolBar 修改边距
  3. Android屏幕适配全攻略 (转载)
  4. 设计模式学习之中介者模式(Mediator,行为型模式)(18)
  5. csharp: Export or Import excel using NPOI
  6. OpenJudge-计算点的距离并排序
  7. 【转】Android.mk文件语法规范(Android.mk File)
  8. codeforce #339(div2)C Peter and Snow Blower
  9. [MOC062066]背景建模资料收集整理
  10. V5
  11. WPF DataGrid Drag
  12. C#图解教程 第二十四章 反射和特性
  13. PHP 中的CURL 模拟表单的post提交
  14. vs-code 基础设置
  15. android获取Context
  16. javascript判断节点是否在dom
  17. JavaScript数组&amp;类数组转换
  18. HDFS文件系统的JAVA-API操作(一)
  19. hdu4045(递推)
  20. 定时任务&amp;&amp;找出两个list的不同

热门文章

  1. formSelects设置不可选择
  2. [LuoguP2124]奶牛美容_bfs_floyd_曼哈顿距离
  3. [转帖]「知乎知识库」— 5G
  4. Mysql:too many connect
  5. 2019上海网络赛 F. Rhyme scheme 普通dp
  6. LC 349. Intersection of Two Arrays
  7. QT 打包exe
  8. python学习-1 编程语言的介绍
  9. 关于阮一峰老师es6(第三版)中管道机制代码的理解浅析
  10. django 权限控制精简版