9.原型模式
来源:互联网 发布:json在线编辑器 编辑:程序博客网 时间:2024/05/17 23:18
原始方法:
index.php
define('BASEDIR',__DIR__);include BASEDIR . '/IMooc/Loader.php';spl_autoload_register('\\IMooc\\Loader::autoload');$canvas1 = new IMooc\Canvas();$canvas1->init();//镂空$canvas1->rect(3,6,4,12);$canvas1->draw();echo '<br/>======================================<br/><br/><br/>';//传统方式,new 两个对象$canvas2 = new IMooc\Canvas();$canvas2->init();//镂空$canvas2->rect(3,6,4,12);$canvas2->draw();
原型模式:
Canvas.php
<?phpnamespace IMooc;//模拟一个画布class Canvas{ public $data; protected $decorators = array(); //Decorator function init($width = 20, $height = 10) { $data = array(); for($i = 0; $i < $height; $i++) { for($j = 0; $j < $width; $j++) { $data[$i][$j] = '*'; } } $this->data = $data; } function addDecorator(DrawDecorator $decorator) { $this->decorators[] = $decorator; } function beforeDraw() { foreach($this->decorators as $decorator) { $decorator->beforeDraw(); } } function afterDraw() { $decorators = array_reverse($this->decorators); foreach($decorators as $decorator) { $decorator->afterDraw(); } } function draw() { $this->beforeDraw(); foreach($this->data as $line) { foreach($line as $char) { echo $char; } echo "<br />\n"; } $this->afterDraw(); } function rect($a1, $a2, $b1, $b2) { foreach($this->data as $k1 => $line) { if ($k1 < $a1 or $k1 > $a2) continue; foreach($line as $k2 => $char) { if ($k2 < $b1 or $k2 > $b2) continue; $this->data[$k1][$k2] = ' '; } } }}
index.php
<?phpdefine('BASEDIR',__DIR__);include BASEDIR . '/IMooc/Loader.php';spl_autoload_register('\\IMooc\\Loader::autoload');//新建一个原型方法$prototype = new IMooc\Canvas();//只进行了一次 init;$prototype->init();//------------$canvas1 = clone $prototype;$canvas1->rect(3,6,4,12);$canvas1->draw();echo '<br/>======================================<br/><br/><br/>';$canvas2 = clone $prototype;$canvas2->rect(5,10,15,20);$canvas2->draw();
0 0
- 9.原型模式
- 9.原型模式
- 设计模式--9.原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型 模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- GuideMap 登陆界面 详细文档(四)
- tinyos学习之day 1
- 调试小技巧:生成(捕获)存储过程的“形参-实参”对值
- android 蓝牙锁应用实例开发(一) 简介
- 工作半年,总结分享
- 9.原型模式
- Linux命令之file命令 待续版
- day17
- PAT (Advanced Level) Practise 1029 Median (25)
- ThreadLocal的原理
- TOYS(水解析)
- Python使用mechanize模拟登录、抓取数据的代码
- Delphi IDHTTP用法详解
- 12.3.19 fields ——elasticsearch中文文档