php八大设计模式之简介篇
更深入的理解面向对象的思想,有利于开发出扩展性强的程序。在 PHP 面向对象中有一个 “开闭原则” :“软件实体应当对扩展开放,对修改关闭”。通俗的说: 添加新类/接口等进来行,修改不行。
简单点来说,就是用到什么类,就去实例化对应的类。比如:php 可能连接 mysql,可能连接 sqlserver,也可能是 oracle 数据库,可以动态的去链接。
书籍<php权威编程>(英文名称为PHP 5 Power Programming)也提到一个工厂模式的例子:在为用户注册的时候,分为很多种角色的用户。比如册用户,匿名用户、管理员用户等。完全使用可以使用工厂的思想来实现,代码也容易维护,为每种角色可以生成操作的类。
详情:点击打开链接
2、单例模式
无论实例化多少次只产生一个对象,减少内存开销。
php的单例,仅指进程中单例,不似Java,在整个内存中单例。
详情:点击打开链接
3、职责链模式
当发生情况去找最近的类(就是级别最低的)去解决,如果解决不了就顺着往上找职责更高的,直到解决为止。
注意:一定是要有一个职责最高的类,否则会有问题。
详情:点击打开链接
4、观察者模式
分为观察者、被观察者。观察者时刻监听被观察动态,及时做出相应改变。
详情:点击打开链接
5、策略模式
提供一个虚拟的整体,根据不同的要求(参数)提供不同的“零件”(实例化不同的对象返回)。
跟工厂模式很是相似。
详情:点击打开链接
6、装饰器模式
一条从初始值“装饰”到最终值的链条。动态、扩展性好。
详情:点击打开链接
7、适配器模式
将一个抽象被具体后的结果转换成另外一个需求所需的格式。
在生活中也处处有适配器的出现,比如转换头,就是让两种不同的规格合适的搭配在一起。
详情:点击打开链接
8、桥接模式
一个抽象产生多种具体的实现方式,单纯的通过子类继承会有子类爆炸(过多的子类产生)的现象,系统需要它们之间进行动态耦合。
详情:点击打开链接
php八大设计模式之简介篇的更多相关文章
- php设计模式笔记--总结篇
一.引入 设计模式的一般定义不再说,只大概说一下我理解的设计模式,我理解的设计模式的主要目的是利用面向对象(类.接口等)特点,让代码更加易于扩展,易于重用,易于维护.这三个特点也就要求我们不要将太多 ...
- SpringMVC(前端设计模式)简介
一.提供一个入口,让所有的请求都进行 / ,然后再分配给对应的页面,这就是前端设计模式(front) @WebServlet("/") 不过滤 .jsp public class ...
- JAVA设计模式---总述篇
一.设计模式(Design Pattern): 1.设计模式的概念 是前辈们对代码开发经验的总结,是解决特定问题的一系列套路.它不是语法规定,而是一套用来提高代码可复用性.可维护性.可读性.稳健性以及 ...
- 【设计模式】第一篇:概述、耦合、UML、七大原则,详细分析总结(基于Java)
迷茫了一周,一段时间重复的 CRUD ,着实让我有点烦闷,最近打算将这些技术栈系列的文章先暂时搁置一下,开启一个新的篇章<设计模式>,毕竟前面写了不少 "武功招式" 的 ...
- java设计模式 01 开山篇
一. 设计模式概述 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. ...
- C#设计模式之总结篇
一.引言 C#版本的23种设计模式已经写完了,现在也到了一个该总结的时候了.说起设计模式,我的话就比较多了.刚开始写代码的时候,有需求就写代码来解决需求,如果有新的需求,或者需求变了,我就想当 ...
- PHP八大设计模式
设计模式 单例模式解决的是如何在整个项目中创建唯一对象实例的问题,工厂模式解决的是如何不通过new建立实例对象的方法. 单例模式 $_instance必须声明为静态的私有变量 构造函数和析构函数必须声 ...
- IOS设计模式第十篇之命令行设计模式
命令行设计模式: 命令设计模式将一个请求或行动作封装为对象.这个封装请求比原始的请求要灵活并且可以在对象之前被传递,存储,动态修改或者放进队列里面.苹果 苹果公司实现这种模式使用Target-Acti ...
- IOS设计模式第八篇之键值观察模式
版权声明:原创作品,谢绝转载!否则将追究法律责任. 键值观察模式: 在KVO,一个对象可以要求被通知当他的某个特殊的属性被改变了.自己或者另一个对象.如果你感兴趣你可以阅读更多的信息参考: Apple ...
随机推荐
- 移动端1px细线问题
1可以用伪类实现 .con{position: relative;.con:before { content: " "; position: absolute; left: 0; ...
- Codeforces 723D. Lakes in Berland
解题思路: 1.dfs所有的水,顺便计数大小并判断是不是湖. 2.如果是湖,将大小和坐标存下来. 3.对湖按大小从小到大排序. 4.dfs前(湖的数量-k)个湖,用*填充这些湖. 代码: #inclu ...
- python 时间差计算
import time import datetime datebg=input("date begin:") dateed=input("date end:" ...
- Activiti 23张表及7大服务详解
7大服务介绍 服务名称 描述 RepositoryService Activiti 中每一个不同版本的业务流程的定义都需要使用一些定义文件,部署文件和支持数据 ( 例如 BPMN2.0 XML 文件, ...
- 我的Java历程_spring+springmvc+mybatils整合问题
作为一个初学框架的菜鸟,有时候遇到异常时真的不好判断问题的出处,因为一般框架不就是导jar包,配置文件嘛,对于一个新手来说要看懂错误出现的含义韩式有些难的,lz昨天整合spring+mybatils时 ...
- Python3基础笔记---面向对象
只是对一些新的知识的记录 1.创建类 class ClassName: <statement-1> . . . <statement-N> 类实例化后,可以使用其属性,实际上, ...
- echars自定义提示框位置
tooltip: { trigger: 'item', formatter: "{a} <br/>{b}: {c} ({d}%)", position:function ...
- selenium自动化(一).........................................搭建环境
一 环境搭建 安装python(建议使用py3) py2和py3在语法上会有一定的差别 第三方插件逐步转向py3,很多py2的插件已经停止维护 本教程的所有代码基于py3 安装selenium插件 ...
- HDU 1796 How many integers can you find(容斥原理)
题意 就是给出一个整数n,一个具有m个元素的数组,求出1-n中有多少个数至少能整除m数组中的一个数 (1<=n<=10^18.m<=20) 题解 这题是容斥原理基本模型. 枚举n中有 ...
- dashboard安装
1,安装程序包 # yum install -y openstack-dashboard 2,修改配置文件 # vim /etc/openstack-dashboard/local_settings ...