-
形象化设计模式实战
收藏博客简单易懂,从php实例出发,将设计模式人形化,冠以其性格特点,方便记忆,深入理解设计模式的原理与技巧,熟悉各个设计模式的适用场景,优缺点,不同点。阅读后对自我的编码能力会有显著的提升,是编码进阶必走之路。
最近更新文章
跨战区模式PK(总结)
创建类模式描述如何创建对象,行为类模式关注如何管理对象的行为,结构类模式则看重于如何建立一个软件结构,虽然三种模式的着重点不同,但是在实际应用中还是有重叠的,会出现一种模式适用,另外一种模式也适用的情况。
一、策略模式VS桥梁模式
策略模式是一个行为模式,旨在封装一系列的行为,封装的格式(算法)不同,行为也就不同;而桥梁模式则是解决在不破坏封装的情况下如何抽取出它的抽象部分和实现部分,它 ...
行为类模式大PK(总结)
行为类模式包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法、访问者 ...
结构类模式大PK(总结)
结构类模式包括适配器模式、桥梁模式、组合模式、装饰模式、门面模式、享元模式和代理模式,它们都是通过组合类或对象产生更大结构以适应更高 ...
创建类模式大PK(总结)
创建类模式包括工厂方法模式、建造者模式、抽象工厂模式、单例模式和原型模式,它们都能够提供对象的创建和管理职责。其中的单例模式和原型模式非常容易理解,单例模式是要保持在内存中只有一个对象,原型模式是要求通过复制的方式产生一个新对象,这两个不容易混淆。下面主要分析其它三种模式。
一、工厂方法模式VS建造者模式
1、意图不同
在工厂方法模式里,关注的是一个产品整体,无须关心产品 ...
变脸不变质的桥梁模式(Bridge Pattern)
有一哥们是搞山寨货的,什么流行就搞什么。自己有个厂子,前些时间服装挣钱,就生产衣服,现在搞手机挣钱,搞手机,这哥们很聪明,就换了个产品,工人,厂房都不变。他是怎么做到的?用类图来模拟一下:
由类图可以看出这哥现有两家公司,一个搞房地产,一个搞山寨货(phone),房地产是长久渠道,山寨随时可能变更。
用PHP来实现:
<?php
abstract class Corp {
p ...
懂得分享的享元模式(Flyweight Pattern)
今天学习一个对php来说意义不大的模式——享元模式
竟然意义不大为什么要学?我一直认为设计模式是不针对语言的,相对于目前的php意义不大,并不表示其本身没有意义,其在编译型的语言里还是有很多的用处的。
享元模式的定义
享元模式是池技术的重要实现方式,其定义为:使用共享对象可有效地支持大量的细粒度的对象。太简单了,通俗地说就是把经常要使用到的对象共享起来,而不去从新创建而占用内存。其大致 ...
原始的解释器模式(Interpreter Pattern)
解释器模式的定义(现实项目中很少遇到,因此直接理论先。。。)
解释器模式是一种按照规定语法进行解析的方案,在现在项目中使用较少,其定义为:给定一门语言,定义它的方法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。其构成如下:
1、AbstractExpression——抽象解释器
具体的解释任务由各个实现类完成,具体的解释器分别由TerminalExpression和No ...
变化多端的状态模式(State Pattern)
现在写字楼越建越高,码农上个班不但要挤个地铁,还要挤个电梯。电梯的运行简单有这么几个状态:运行、停止、关闭、打开,电梯想要正常的运行 ...
随机应变的访问者模式(Visitor Pattern)
有一天,技术总监说要知道所有技术员工的工作情况,第二天,老板说要知道所有员工的业绩,再有一天,HR总监要知道所有员工的工资。每一次都是利用组合模式遍历出员工后获取员工的相关信息。也许你会说,直接把所有的信息全输出就行了,那估计你要被老板叼了,老板就想知道业绩,你把一个大表给看找,好吧,你可以回家了!让访问者模式来帮我们解决这个问题,类图如下:
可以看出,有个visitor,这就是访问者,貌似有点 ...
回到过去的备忘录模式(Nemento Pattern)
今天学习一个比较少用的备份模式-----备忘录模式。通过名字应该都可以知道其作用了,就是对象或对象属性作备份,方便随便取回。拿打怪来说,开始 ...
金玉其外的门面模式(Facade Pattern)
今天说一个简单易懂的封装模式——门面模式。
<?php
interface ILetterProcess{
public function writeContent( $content );
public function fileEnvelope( $address );
public function letterIntoEnvelope();
public f ...
隔墙有耳的观察者模式(Observer Patern)
登录系统想必大家都做过,验证用户名密码就登录成功,日志系统应该记录此次登录,如果登录出错,安全系统应该会记录此次错误,邮件系统也应该会发送相关邮件给管理员,等等。这就好像登录系统被很多人监视一样,一旦有什么风吹草动,立即会被其它系统获悉。那就用观察者模式来试试,类图如下:
很简单的模式,实现代码:
<?php
interface Observable{
function attac ...
树状的组合模式(composite pattern)
一个公司是由每一个工作的成员组成,每一个成员有不同的属性(名字,职位,薪水),根据不同的等级,构成一个树形的结构。总经理是这个棵树的根节点,因为他没有上级,部门经理是树枝节点,因为他既有上级也有下级,小喽啰是叶节点,因为他是最底层的苦逼,没有下级。现用组合模式将这个树展示出来,类图:
代码如下:
<?php
abstract class Corp {
private $name = ...
美中不足的适配器模式(adapter pattern)
之前买过个ipad玩,当用其充电器充电时遇到了点麻烦(有的同学应该知道),家里没有适合它的插座。还好,卖家送了个接头转换部件,问题轻松解决。这就是适配器的作用。
<?php
interface IUserInfo{
public function getUserName();
public function getUserId();
public function getU ...
足智多谋的策略模式(Strategy Pattern)
夏天来了,深圳的大小梅沙必将是人满为患,大家在游泳时还是要注意安全地。那如果真人有溺水了怎么办?有人会打120,有人会做人工呼吸(必须得是个美女才行),有人会用拳头叩击心前区急救。他们的做法都是对的,只是不同情况,不同的人会有不同的策略!既然这样,那就用策略模式来模拟下,类图如下:
由图可以看出,策略模式非常简单,直接上代码:
<?php
interface IStrateg ...
另辟蹊径的装饰模式(Decorator Pattern)
在天朝,没钱的孩子从小就得学好”数理化“,为的就是能考个好分数。但并不是每一个小孩都是读书的料,有的小孩就是没那个天赋,小的时候,记 ...
职责分明的责任链模式(Chain of Responsibility Pattern)
中国自古有重男轻女的观念,在古代,未婚女子要想出去逛街都要经过父亲的同意,而有丈夫的则要请示丈夫,如果丈夫去世了,有儿子的还得请示儿 ...
不求过程的命令模式(Command Pattern)
以前做对外做项目的时候,部门大致分为需求组,美工组,代码组,客户找到需求人员讨论需求,找到美工人员讨论页面,找到代码人员讨论功能。
<?php
abstract class Group {
public abstract function find();
public abstract function add();
public abstract function dele ...
助人为乐的中介者模式(Mediator Pattern)
还记得我刚毕业的第一家公司是做b2c的,当时要做一个进销存系统,相信做过的人都应该清楚。拿最简单的进销存系统为例,其可分为采购管理、销售 ...
clone的原型模式(Prototype Pattern)
发邮件的功能想必都做过,发邮件相当的耗时,于是大多使用多线程来实现。但假设产生第一封邮件对象,放到线程1中运行,还没有发送出去,线程2也 ...