
设计模式
文章平均质量分 92
三石先生XL
这个作者很懒,什么都没留下…
展开
-
PHP之星际设计模式中(转自lightsaber)
8-职责链模式星际的兵种属性随着对平衡性的调节,会进行修改。如果这样的话,我们就要考虑减少一个事件和具体处理的关联性。比如一颗原子弹投下的瞬间,在杀伤范围内的部队或者建筑都会减少血,但是随着距离中心点的远近,受损程度是不同的,而且不同的兵种和建筑受损情况是不同的。待解决的问题:原子弹投下的瞬间,将杀伤的处理分别交给杀伤范围内的部队或者建筑自己的方法处理。思路:建立一个接口,让所有的转载 2012-05-07 08:32:57 · 2230 阅读 · 0 评论 -
外观模式(Facade Pattern)
什么是(Facade)模式? Facade(外观)模式为子系统中的各类(或结构与方法)提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用(出自百度文库)。即当子系统复杂或者繁锁时,我们让子系统提供一个窗口,程序中称为接口,其它程序或者对象就通过这个窗口(接口)与此子系统联系。接口可以是类或方法等。这样就简化了子系统的使用。 作用是什么? 简化转载 2012-05-14 15:36:43 · 451 阅读 · 0 评论 -
鸭子-策略模式(Strategy Pattern)
鸭子-策略模式(Strategy)前言万事开头难,最近对这句话体会深刻!这篇文章是这个系列正式开始介绍设计模式的第一篇,所以肩负着确定这个系列风格的历史重任,它在我脑袋里默默地酝酿了好多天,却只搜刮出了一点儿不太清晰的轮廓,可是时间不等人,以后再多“迭代”几次吧!在前面的随笔里,我已经提到了,这个系列准备以《Head First Design Patterns》的结构为主线,所以每个模式的转载 2012-05-11 16:39:53 · 604 阅读 · 0 评论 -
职责链模式(Chain of Responsibility Pattern)-餐馆的故事
我们在餐馆吃饭的时候,一般都是在拿到菜单后,选择喜欢的菜,然后通知服务员。服务员会将我们的定单交给大厨,大厨可能会亲自去做这道菜,也可能安排给小厨来做,总之,我们不用担心他们没有人做菜,即使有时候等的时间长点。下面我们来分析一下。首先,对于我们这些点菜的人来说,我们一般不了解这些厨师,我们没法找到某个具体的厨师让他去做,所以只好把请求交给服务员;然后,对于餐馆的服务员、大厨、小厨来说,他们转载 2012-05-17 09:05:33 · 439 阅读 · 0 评论 -
观察者模式(Observer Pattern)
设计模式-观察者模式(上) 本文参考Head First设计模式一书,感觉书中的例子实在很好,很贴切。对模式的知识点进行总结,并对书的源码做了一定注释。 观察者模式要点有二:主题和观察者。最贴切的案例是:杂志订阅,杂志是主题,观察者是订阅者。当出版新杂志时候,这个事件会自动通知所有的订阅者。根据OO基本原则,应该针对接口编程(当然原因很多),主题转载 2012-05-14 17:07:34 · 424 阅读 · 0 评论 -
适配器模式(Adapter Pattern)
今天我们要学习的是设计模式中的适配器模式,适配器模式其实也比较好理解,光从它的名字我们都能理解个所以然了。适配器模式定义:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。上面的这段话可能对初学者来说有点抽象,短短的一段话提到了几个关键的技术点。都是一些基本语法,如果我们还没有掌握这些语法最好还是先去解决前提再来攻克设计转载 2012-05-27 14:42:27 · 492 阅读 · 0 评论 -
享元模式(Flyweight Pattern)
一、FlyWeight模式定义:运用共享技术有效地支持大量细粒度对象。二、模式解说也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。在Flyweight模式中,由于要产生各种各样的对象,所以在Flyweight(享元)模式中常出现Factory模式。Flyweight的内部状态是用来共享的,Flyweight factory负责维转载 2012-05-23 13:57:11 · 624 阅读 · 0 评论 -
中介者模式(Mediator Pattern)
定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。类型:行为类模式类图:中介者模式的结构 中介者模式又称为调停者模式,从类图中看,共分为3部分: 抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信。一般包括一个或几个抽象的事件方法,并由子类去实现。中转载 2012-05-25 17:27:25 · 457 阅读 · 0 评论 -
组合模式(Composite Pattern)
Composite组合模式主要是应对这样的问题:一类具有“容器特征”的对象——即他们在充当对象的同时,又是其他对象的容器的情况。在编写时我们常常会造成:客户代码过多地依赖于对象容器复杂的内部实现,对象容器内部实现结构(而非抽象接口)的变化将引起客户代码的频繁变化,带来了代码的维护性、扩展性的弊端。 GoF《设计模式》中说到:将对象组合成树形结构以表示“部分-整体”的层次结构。Com转载 2012-05-28 17:10:56 · 429 阅读 · 0 评论 -
建造器模式
<?php/** 生成器模式* 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.* 为了将构建复杂对象的过程和它的部件解耦,非常类似抽象工厂模式*//** * 餐厅员工 */class ConcreteBuilder{ public function __construct(){} //添加汉堡包 public function转载 2012-05-10 15:34:59 · 663 阅读 · 0 评论 -
建造者模式(Builder Pattern)
概述在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?这就是要说的建造者模式。本文通过现实生活中的买KFC的例子,转载 2012-05-22 11:06:52 · 619 阅读 · 0 评论 -
PHP之星际设计模式上(转自lightsaber)
1-简单工厂模式不熟悉面向对象的朋友,建议先看看用星际快速入门PHP面向对象编程上次用星际争霸讨论了面向对象的基础知识,似乎面向对象能解决很多问题。但是还会有很多问题,简单的靠类和对象解决不得太好。比如如何根据玩家输入的内容(尽管可以转化为其他字符串),来确定要制造的兵种,玩家不会输入代码:new Marine()。 和星际一样,PHP也没有终极兵种,如果类和接口是兵种的话转载 2012-05-07 08:31:33 · 1823 阅读 · 0 评论 -
PHP之星际设计模式下(转自lightsaber)
15-状态模式星际的一些兵种会有不止一种状态,比如坦克可以架起来,枪兵可以打兴奋剂,甚至还有一些被动的,比如被虫族女王喷洒绿色液体后,敌人的行动变慢。如果按照一般的思路,每次我们对一个小兵进行操作的时候,比如一辆坦克,我们都要用if判断他的状态,这样代码中会有很多的if,else或者swith。不过我们可以发现,我们需要的是他在某个状态下的行为,如果把这些行为按照状态封装起来,就可转载 2012-05-07 08:35:41 · 1255 阅读 · 0 评论 -
工厂模式(简单工厂、工厂和抽象工厂) C++
今天开始这个系列之前,心里有些恐慌,毕竟园子里的高手关于设计模式的经典文章很多很多,特别是大侠李会军、吕震宇 老师的文章更是堪称经典。他们的文笔如行云流水,例子活泼生动,讲解深入浅出。好在他们都是用C#描述,也没有提供必要的源码下载,所以我这里用C++实现。首先我想声明的是我的文笔绝对不如他们的好,例子也没有他们的形象,不过我打算把C++的代码实现和类图提供给大家,就算作为一种补充吧。转载 2012-05-11 15:20:02 · 1802 阅读 · 0 评论 -
工厂方法模式与抽象工厂模式的区别
工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类只能创建一个具体产品类的实例。抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类可以创建多个具体产品类的实例。 区别:工厂方法模式只有一个抽象产品类,而抽转载 2012-05-11 15:08:31 · 375 阅读 · 0 评论 -
MVC模式中如何区分应用程序逻辑(Controller层)和业务逻辑(Model层)
// Cart控制器class Controller_Cart{ function actionAddGoods() { $goods_id = (int)$_GET['goods_id']; Cart::instance()->add($goods_id)->save(); echo '添加成功'; }转载 2012-06-07 16:25:31 · 8225 阅读 · 0 评论