1 2{《HeadFirst设计模式》之单例模式 } 3{ 编译工具: Delphi2007 for win32 } 4{ E-Mail : guzh-0417@163.com } 5 6unit uChocolateBoiler; 7 8interface 910type11 TChocolateBoiler = class(TObject)12 strict private13 class var14 FUniqueInstance: TChocolateBoiler;15 strict private16 FEmpty : Boolean;17 FBoiled: Boolean;18 constructor Create;19 public20 class function GetInstance: TC...
那些迷信设计模式的人,来修改一下这个方法吧。看看你最终的代码膨胀为几倍。。。public virtual PasswordChangeResult ChangePassword(ChangePasswordRequest request) { if (request == null) throw new ArgumentNullException("request"); var result = new PasswordChangeResult(); if (String.IsNullOrWhiteSpace(request.Email)) { resul...
【JS 设计模式 】用组合模式来实现树形导航--代码结构思路分析(一)根据上一节中的HTML代码结构我们通过JS来渲染HTML代码,我们先提供一下JS的代码片段,这代码代码不是一个完整的代码是经过简化的。通过JS代码来分析如何组装HTML的Composite类型的代码:function TreeComposite(id, name, total, level, last) {var root = document.createDocumentFragment();var panel = document.createElement("div");panel.setAttribute("cl...
<?php
header("Content-type:text/html;charset=utf-8");
/**
* 共同接口
*/interface db
{function conn();
}/**
* mysql类
*/class DbMysql implements db
{public function conn(){echo "连接上了mysql<br>";}
}/**
* sqlite类
*/class DbSqlite implements db
{public function conn(){echo "连接上了sqlite<br>";}
}/**
*
*/class Factory
{publicstatic function createDb($type){if ($type == ‘mysql‘) {$db = new DbMys...
一、模式的定义与特点 观察者(Observer)模式的定义:观察者模式又被称为发布-订阅/模型-视图模式,属于行为型设计模式的一种,是一个在项目中经常使用的模式。指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。二、观察者模式优缺点 观察者模式是一种对象行为型模式,其主要优点如下:降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。目标与观察者之...
Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛,它的设计模式是Template Method Pattern。这是一个爬虫框架,所以它需要请求网页模块,下载网页模块,处理网页信息模块,对所需要的信息进行存储的模块。对于一个爬虫工程师来说,需要爬取的不只是一个网站,在对多个网站进行爬取,为了简化编写爬虫的过程,对上面几个模块来说,是爬虫所共有的流程,因此可以把他们固定下来。框架的力...
Singleton和Double-Checked Locking设计模式,分别指的是单例模式和双重检查锁模式,它们都可以用于确保某个类只有一个对象实例化。两个模式的区别在于:Singleton模式用在单线程应用程序中,而Double-Checked Locking模式用于多线程模式。一、Singleton模式UML图:代码: [java] view plaincopy package bupt.xujinliang.singletonpattern; /** * * @author jin * */ public class SingletonExample { public static v...
<?php
header("Content-type:text/html;charset=utf-8");/**
* 文章编辑类
*/class Article
{protected $content;protected $art = null;public function __construct($content){$this->content = $content;}public function decorator(){return $this->content;}
}/**
* 小编加个摘要
*/class BianArticle extends Article
{public function __construct(Article $art){$this->art = $art;$this->decorator();}public function d...
软件设计模式分为三种类型:创建型结构型行为型 本文以行为型中的模板方法模式(Template Method)为例,分析其代码结构特性一、什么是模板模式方法??模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板模式方法由抽象类和具体类组成:抽象类:定义抽象的原语操作,具体子类将重定义它们来实现算法的步骤。实现一个模板...
组合模式又叫部分整体模式,在处理类似树形结构的问题时常用。publicclass TreeNode { private String name; private TreeNode parent; private Vector<TreeNode> children = new Vector<TreeNode>(); public TreeNode(String name){ this.name = name; } public String getName() { return name; } publicvoid setName(String name) { this.name = name; } public TreeNode getParent() { return parent; } publi...
1 2{《HeadFirst设计模式》之组合模式 } 3{ 组合与单项的抽象父类 } 4{ 编译工具:Delphi2007 for win32} 5{ E-Mail :guzh-0417@163.com } 6 7unit uMenuComponent; 8 9interface1011uses12 SysUtils;1314type15 TMenuComponent = class abstract(TObject)16 public17 procedure Add(aMenuComponent: TMenuComponent); virtual;18 procedure Remove(aMenuComponent: TMenuComponent); virtual;19 functio...
代码如下:<?php /** * 原型模式 * * 用原型实例指定创建对象的种类.并且通过拷贝这个原型来创建新的对象 * */ abstract class Prototype { private $_id = null; public function __construct($id) { $this->_id = $id; } public function getID() { return $this->_id; } public function __clone() // magic function { $this->_id += 1; } public function getClone() { return clone $this; } } class ConcretePrototype exten...
书中的例子都比较浅显易懂,不过由于是外国佬写的,所以例子的习惯不是很附合中国特色,可能偶尔看起来有些别扭,还有语言习惯也不是中国风。当然看过这本书之后,你才能深刻理解设计模式到底能为你解决哪些问题,不能为你解决哪些问题(比如不能代替你的编码)。 我将书中部分代码改成PHP,看下代码再配合概念应该是比较容易理解了。 策略模式 代码如下:/** * 策略模式 * 定义了算法族,分别封装起来,让它们之间可以互相替换...
代码均来源于《PHP设计模式》一书?<?php/** * 转自 《PHP设计模式》 第六章: 装饰器模式 * * 装饰器设计模式适用于下列工作场合: 需求变化是快速和细小的,而且几乎不影响应用程序的其他部分。() * 使用装饰器设计模式设计类的目标是: 不必重写任何已有的功能性代码,而是对某个基于对象应用增量变化。 * 装饰器设计模式采用这样的构建方式: 在主代码流中应该能够直接插入一个或多个更改或“装饰”目标对象的装饰器,同时不影响...
接口在php只能起到约束类的定义作用,虽不像c#/java那么直观,但基于oop的封装要求,使用接口可以提高程序的可扩展性,如实现代理设计模式。 代码如下:<?php //人类接口 interface IHuman { function GetName(); } //男人类,实现人类接口 class ManClass implements IHuman { //获取姓名方法 public function GetName() { return "Im man."."<br>"; } } //女人类,实现人类接口 class WomanClass implements IHuman { //获取姓名...