观察者模式 概述: 1.观察者模式(Observer),当一个对象状态发生改变时,依赖他的对象全部会收到通知,并自动更新 2.场景:一个事件发生后,要执行一连串更新操作,传统的编程方式,就是在事件的代码之后直接加入处理逻辑.当更新的逻辑增多之后,代码变得难以维护,这种方式是耦合的,侵入式的,增加新的逻辑要修改事件主体的代码 3.观察者模式实现了低耦合,非侵入式的通知于更新机制 代码如下 传统的方式是如下:事件触发时,会执行逻辑1,逻辑2,逻辑3....... 事件和更新操作时耦合在一起,编程是侵…
一.工厂设计模式 index.php $db = IMooc\Factory::createDatabase(); 使用工厂类的静态方法直接创建一个dababase对象,当类名发生修改时,在工厂里修改即可. IMooc/Factory.php 二.单例设计模式 保证在整个脚本运行期间,只有一个对象的实例,比如数据库操纵对象 Database.php Factory.php index.php output同一个对象: object(IMooc\Database)#1 (0) { } object…
数据对象映射模式 1.数据对象映射模式,是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作 2.在代码中实现数据对象映射模式,我们将实现一个ORM类,将复杂的SQL语句映射成对象属性的操作 3.结合使用数据对象映射模式.工厂模式.注册模式 具体代码如下: 1.定义一个user表,结构如下: 插入一条数据: 在User.php中定义User类,用来操作数据表: 在index.php中new一个User类,修改其属性,在脚本结束时,调用析构方法,将修改后的属性存入数据表,从而实现对…
装饰器模式(Decorator) 概述 1.装饰器模式可以动态地添加修改类的功能 2.一个类提供了一项功能,如果要在修改并添加额外的功能,传统的编程模式,需要写一个子类继承它,并重新实现类的方法 3.使用装饰者模式,仅需在运行时添加一个装饰器对象即可实现,可以实现最大的灵活性 代码实现如下 使用原型模式中的Canvas类,如果当前想设置draw()方法画图的颜色为红色,传统的方式实现如下: 定义一个子类,重写draw()方法,从而实现特定的功能:如果需要增加很多功能呢?就会遇到问题: 使用装饰者…
原型模式 概述: 1.与工厂模式作用类似,都是用来创建对象 2.与工厂模式的实现不同,原型模式是先创建好一个原型对象,然后通过clone原型对象来创建新的对象,这样就免去了类创建时重复的初始化操作 3.原型模式适用于大对象的创建,创建一个大对象需要很大的开销,如果每次new就会消耗很大,原型模式仅需内存拷贝即可 代码如下: 1.编写一个画图类: <?php namespace IMooc; class Canvas{ public $data; /** * [生成一块宽为20,高为10的包含*的…
策略模式 1.概述:策略模式,将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,这种模式称为策略模式 例如:一个电商网站系统,针对男性女性用户要各自跳转到不同的商品类目,并且所有广告位展示不同的广告 传统的是使用条件分支进行判断,代码不灵活 使用策略模式,要先定义一个约束行为的接口,I_UserStrategy 定义两种策略,男性male和女性female策略类,分别实现了I_UserStrategy. MaleUserStrategy.php FemaleUserStrategy.p…
适配器模式 1.适配器模式,可以将截然不同的函数接口封装成统一的API 2.实际应用举例,PHP的数据库操作有mysql.mysqli.pdo三种,可以用适配器模式统一成一致,类似的场景还有cache适配器,将memcache,redis,file,apc等不同的缓存函数,统一成一致.APC参考鸟哥博客(http://www.laruence.com/tag/apc) 以数据库操作接口为例: 1.定义数据库操作类的接口,用来约束不同的数据库操作类 在IMooc/Database/I_Databa…
SPL标准库的使用 SPL是用于解决典型问题(standard problems)的一组接口与类的集合. 1.SPL提供了很多数据结构类,如SplStack.SqlQueue.SqlHeap.SplFixedArray等 实例代码如下: a.栈 b.队列 c.定长数组 2.PHP链式操作的实现 index.php IMooc/Database.php 3.PHP魔术方法 a.__get\__set:对象属性的管理 index.php Object.php output : string(19)…
一.编程字体选择 1.选择等宽字体 包括Courier New ,Consolas,Source Code Pro(推荐) 2.环境搭建(建议easyPHP) 二.开发符合PSR规范的基础框架 PSR: 1.命名空间和类文件的绝对路径必须一致 2.类名必须大写: 3.除入口文件外,其他的 ".php"必须只有一个类 符合PSR-0规范的基础框架: 1.全部使用命名空间 2.所有PHP文件必须自动载入,不能有include.require 3.单一入口 入口文件index.php 文件目…
Javascript是越来越厉害了,一统前后端开发.于是最近把设计模式又看了一遍,顺便做了个笔记,以方便自己和他人共同学习. 笔记连载详见:http://www.meteorcn.net/wordpress/2015/07/17/笔记-javascript设计模式-目录/ 笔记 Javascript设计模式 目录 综述: 1. Javascript设计模式本身没有什么技术含量,无非是用动态特性存取现有功能而已 2. 技术基础就是面向对象的实现与理解 3. 绝大多数模式是按功能区分的,明白了Jav…