摘要:> * 通过克隆创建对象 */class Sea {}class EarthSea extends Sea{}class MarsSea extends Sea{}class Plains {}class EarthPlains extends Plains{}class MarsPlains extends Plains{}class Forest {}class EarthForest extends Forest{}class MarsForest extends Forest{}class TerrainFactory { private $sea; private $fo...
阅读全文
摘要:/** * 外观模式 * 为繁杂的操作提供干净的接口 *///阻止事件的默认行为和冒泡/** * 终止事件冒泡 * stopPropagation() * preventDefault() * 对以上两个操作进行外观封装,获取一个干净的接口。 */var myEvent = { stop: function(e) { e.stopPropagation(); e.preventDefault(); }};//跨浏览器封装var myEvent = { stop: function(e) { //其它浏览器 (typeof...
阅读全文
摘要:/** * 来自> * * 本人学习时整理了一遍 *//** * 类继承模式-默认模式 */function inherit (C, P) { C.prototype = new P;}//父构造函数function Parent(name) { this.name = name || "Adam";}//往父类构造函数的原型上添加一个方法Parent.prototype.say = function() { return this.name;}//子类构造函数function Child(name) { this.name = name;}inherit(Child
阅读全文
摘要:<?php/** * 备忘模式 * 即将函数的计算结果缓存,缓存计算量大的计算结果,避免重复计算。提高程序效率。 * * 备忘求阶乘 */function memo_func($n) { static $cache = array(); $selfName = __FUNCTION__; if ($n<=1) { return $cache[md5($n)] = 1; } else { return $cache[md5($n)] = $n*$selfName($n-1); }}for ($i=5; $i<100; $i++) { ...
阅读全文
摘要:> */abstract class Tile { abstract function getWealthFactor();}class Plains extends Tile{ private $wealthfactor = 2; public function getWealthFactor() { return $this->wealthfactor; }}//class DiamondPlains extends Plains { function getWealthFactor() { return parent::g...
阅读全文
摘要:fp = fopen($filename, 'r'); } //在每次迭代之前初始化某些操作 public function rewind() { rewind($this->fp); $this->cur = fgets($this->fp); $this->nxt = fgets($this->fp); return true; } //获取当前元素的键 public function key() { return $this->lineCount++; } ...
阅读全文
摘要:<?php/** * 静态工厂方法 * 如果我们有多个子类需要静态 实例化(见注册表模式),但是我们又不想在每一个子类中都写一个创建对象的方法。 * 那么写在超类中可以吗? * 请看下面: */abstract class DomainObject { public static function create() { //return new self(); return new static(); }}class User extends DomainObject{}class Document extends DomainObject{}//通过D...
阅读全文
摘要:values[$key])) return $this->values[$key]; return FALSE; } public function set($key, $val) { $this->values[$key] = $val; }}/** * 会话级别的注册表 * 本质是将会话数据存入session */class Register2 { private static $instance; private $values = array(); public static func...
阅读全文
摘要:=5.3 * 整理: 苏小林 */class Newspaper implements \SplSubject{ private $name; private $observers = array(); private $content; public function __construct($name) { $this->name = $name; } //添加一个观察者 public function attach(\SplObserver $observer) { $this->observers[] = $...
阅读全文
摘要:/** * 共享原型 * 原理: js中对象按引用传递 *///facade 一个输出函数function log() { console.log([].join.call(arguments, ','));}//第一个类function One(name) { this.name = name || "Adam";}//第一个类原型上添加一个方法One.prototype.say = function() { return this.name;}//实现共享原型function share_prototype(one, two) { two.prototy
阅读全文
摘要://facade 一个输出函数function log() { console.log([].join.call(arguments, ','));}//父类function Parent(name) { this.name = name || "Adam";}//为父类原型上添加一个方法Parent.prototype.say = function() { return this.name;}//子类function Child(name) { //调用父类的构造函数,并作用于子类 Parent.apply(this,arguments);}//用父类的实
阅读全文
摘要:$dstScale) { $sampleWidth = $dstWidth; $sampleHeight = $dstHeight/$srcScale; } else { $sampleWidth = $dstHeight; $sampleHeight = $dstWidth*$srcScale; } $dstImg = imagecreatetruecolor($sampleWidth, $sampleHeight); // 制作缩略图 imagecopyresampled($dstImg, $s...
阅读全文
摘要:> *//** * * 我们来看一下不使用facade模式比较极端的一个例子 * 以下代码只是为了从log中获取信息,并将其转为对象数据 */function getProductFileLines($file) { return file($file);}function getProductObjectFromId($id, $productName) { return new Product($id, $productName);}function getNameFromLine($line) { if (preg_match("/.*-(.*)\s\d+/",
阅读全文
摘要:subscribe('book', function() { var_dump(func_get_args()); echo "I want to read book!";});$pubSuber->publish('book', "this is an string.");$pubSuber->unsubscribe($token);$pubSuber->publish('book', 'suxiaolin');/** * 实现pubsub模式 * 来自> * @a
阅读全文