PHP设计模式
设计模式总的分为三种,创建型模式、结构性模式、行为型模式
1、创建型模式
创建型模式为根据实际情况来创建对象,创建的模式又分为对象创建模式和类创建模式,对象创建模式会把对象创建的一部分在另一个对象中实现,类创建模式则将它对象的创建在子类中实现。
2、结构性模式
结构性模式为处理模块之间的耦合关系
3、行为型模式
行为型模式
创建型 (Creational)
1、简单工厂(Simple Factory):不同于静态工厂是因为不使用static方法
2、工厂方法(Simple Factory):一个class创建一个你想要使用的对象 [code] http://www.phptherightway.com/pages/Design-Patterns.html
3、抽象工厂(Abstract Factor):不使用特定的类来创建相关或是不相关的对象,创建的类都继承相同的接口,抽象工厂不关心对象是如何创建的,he just knows how they go together
4、生成器 (Builder):一个接口,用来创建复杂对象的部分
5、原型 (Prototype):通过创建一个原型对象,然后复制原型(clone)对象来避免通过标准的方式创建大量的对象产生的开销
6、单例 (Singleton):当设计一个web应用的时候,保证一个类仅有一个实例,并提供一个访问他的全局访问点例如框架中的数据库连接 [code]http://www.phptherightway.com/pages/Design-Patterns.html
7、静态工厂(Static Factory):和简单工厂很像,只是使用了静态对象
8、对象池 (pool):对新创建的对象应用一系列的初始化操作,让对象保持立即可使用的状态
9、多例 (Multition):使类仅有一个命名的对象的集合可供使用,像单例模式但是有多个实例。比如2 个数据库连接,比如,一个连接MySQL,另一个连接SQLite
结构型 (Structural)
1、适配器 (Adapter):将不同接口适配成统一的API接口,例如数据操作有mysql、mysqli、pdo等,可利用适配器模式统一接口
2、桥接模式 (Bridge):将抽象部分与它的实现部分分离,使它们都可以独立的变化
3、合成模式 (Composite):将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
4、装饰器模式(Decorater):不修改原类代码和继承的情况下动态扩展类的功能,例如框架的每个Controller文件会提供before和after方法
5、外观模式 (Facade):是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使用子系统更容易使用。
6、享元模式 (Flyweight):把经常要使用到的对象共享起来,而不去从新创建而占用内存。 http://lobert.iteye.com/blog/2066311
7、代理模式 (Proxy):为昂贵或者无法复制的资源提供接口
8、注册模式 (Registry):为应用中常用的对象实现一个中央存储,通常用一个只有静态方法的抽象类来实现(或者使用单例模式)
行为型(Behavioral)
1、责任链模式 (Chain of Responsibilities):使多个对象都有机会处理请求,从而避免请求的发送者和接受者耦合的关系。将这个对象形成一条链,并沿着这条链传递该请求,直到有对象处理它为止。
2、命令模式 (Command):命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。
3、解释器模式 (Interpreter):用于分析一个实体的关键元素,并且针对每个元素提供自己的解释或相应动作
4、迭代器模式 (Iterator):提供一个方法顺序访问一个聚合对象中各个元素,在PHP中将继承Iterator类
5、中介者模式 (Mediator):用一个中介者对象来封装一系列的对象交互。中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。
6、备忘录模式 (Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样可以在以后把该对象的状态恢复到之前保存的状态。
7、观察者模式 (Observer):定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。如微博关注博主,博主更新,关注者都能得到通知
8、状态模式 (State):状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样
9、策略模式 (Strategy):针对一组算法,将每一个算法封装到具有共同接口的独立的类中,例如进入个人主页时,根据浏览者的不同,给予不同的显示与操作 [code]http://www.phptherightway.com/pages/Design-Patterns.html
10、模板方法模式(Template Method):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method 使得子类可以在不改变一个算法的结构的情况下重定义该算法的某些特定的步骤
11、访客模式 (Visitor): 访问者模式表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。
PHP设计模式的更多相关文章
- MVVM设计模式和WPF中的实现(四)事件绑定
MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
- java EE设计模式简介
1.何为设计模式 设计模式提供了对常见应用设计问题的解决方案.在面向对象的编程中,设计模式通常在解决与对象创建和交互相关的问题,而非整体软件架构所面对的大规模问题,它们以样板代码的形式提供了通用的解决 ...
- 计算机程序的思维逻辑 (54) - 剖析Collections - 设计模式
上节我们提到,类Collections中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了第一类,本节我们介绍第二类. 第二类方法大概可以分为两组: 接受其他 ...
- 《JavaScript设计模式 张》整理
最近在研读另外一本关于设计模式的书<JavaScript设计模式>,这本书中描述了更多的设计模式. 一.创建型设计模式 包括简单工厂.工厂方法.抽象工厂.建造者.原型和单例模式. 1)简单 ...
- 《JavaScript设计模式与开发实践》整理
最近在研读一本书<JavaScript设计模式与开发实践>,进阶用的. 一.高阶函数 高阶函数是指至少满足下列条件之一的函数. 1. 函数可以作为参数被传递. 2. 函数可以作为返回值输出 ...
- 设计模式之行为类模式大PK
行为类模式大PK 行为类模式包括责任链模式.命令模式.解释器模式.迭代器模式.中介者模式.备忘录模式.观察者模式.状态模式.策略 ...
- .NET设计模式访问者模式
一.访问者模式的定义: 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 二.访问者模式的结构和角色: 1.Visitor 抽象访问者角色,为该 ...
- Java开发中的23种设计模式详解
[放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...
- java 设计模式
目录: 设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计 ...
- 设计模式之单例模式(Singleton)
设计模式之单例模式(Singleton) 设计模式是前辈的一些经验总结之后的精髓,学习设计模式可以针对不同的问题给出更加优雅的解答 单例模式可分为俩种:懒汉模式和饿汉模式.俩种模式分别有不同的优势和缺 ...
随机推荐
- HBA相关知识
HBA使用详解: 一般的AIX客户端支持的HBA为Emulex HBA卡和交换机硬件确保连接成功的标志: A. 如果是 Emulex卡,卡上的绿灯常亮,黄灯闪烁. B. 如果是 QLogic卡,卡上的 ...
- sql要点
oracle 并操作 union 自动去除重复 如果想保留重复,需要使用union all 交操作intersect 自动去除重复 如果想保留重复,需要使用intersect all ...
- Java多线程开发系列之四:玩转多线程(线程的控制2)
在上节的线程控制(详情点击这里)中,我们讲解了线程的等待join().守护线程.本节我们将会把剩下的线程控制内容一并讲完,主要内容有线程的睡眠.让步.优先级.挂起和恢复.停止等. 废话不多说,我们直接 ...
- nis,nfs,pam小结
最近一周总算把nis/nfs配置起来,中间各种被坑,这里简单记录一下: 主要参考两个大牛的文章,柏青哥,鸟哥 配置完之后的功能是可以连接任意一台主机,所有主机之间共享HOME目录,而且每人都有一定的限 ...
- Android使用ndk-stack获取so奔溃堆栈
利用NDK做开发,因为各种原因的不小心,导致了闪退问题,没有stack的话,很难查到问题的所在.这时候ndk-stack出场了. 先看看如下DUMP信息: ********** Crash dump: ...
- C#调用WebService (转)
1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求, ...
- linux关闭双显卡的方法
我正在使用的一体机是双显卡,在linux下没有很么太好的办法来切换双显卡, 导致使用一会儿后就发烫,关键是这时风扇呜呜的响很吵人 最后找到了下面的解决方法来关掉独立显卡 见 https://githu ...
- MiniUI中DataGrid数据的载入
本文将介绍一下,在ASP.NET MVC环境下,如何用Jquery MiniUI中的Datagrid控件载入数据. 1.效果展示: 2.具体步骤: 1> 既然是在MVC里,那我们的界面自然选择 ...
- Spring学习笔记之五----Spring MVC
Spring MVC通常的执行流程是:当一个Web请求被发送给Spring MVC Application,Dispatcher Servlet接收到这个请求,通过HandlerMapping找到Co ...
- 忘记mysql root密码的解决方法
一. MySQL密码的恢复方法一 有可能你的系统没有 safe_mysqld 程序(比如我现在用的 ubuntu操作系统, apt-get安装的mysql) , 下面方法可以恢复 1. 停止mysql ...