Yii2 设计模式——Yii2 中用到哪些设计模式?
Yii 2 设计模式“包含了两个方面的内容:1. 设计模式,2. Yii 2 框架。
《设计模式》一书虽然以JAVA语言来表达设计模式的思想,但是设计模式远不限制于某一种特定的语言,而是在面向对象编程中通用的思想,各个语言也都有各自的实现方式。
Yii 2 是一款优秀的 PHP Web 框架,Yii2 框架的里里外外都借鉴了很多设计模式的思想。而且,越是 Yii2 内核的部分,设计模式运用的越多。同样的,其他优秀的框架如 Symphony2/Laravel 也是如此,学习 Yii2 的设计模式,无疑对认识其他框架,对提高自己编码能力,加深对软件设计的认识都非常有帮助。
Yii2 设计模式,集中体现在依赖注入(di),服务定位器(service locator),数据库(db),缓存(cache),请求(Request),响应(Response)等核心组件上。
PHP设计模式
根据使用目的设计模式一般可为分为三类:
- 创建型模式(Creational Patterns)
- 结构型模式(Structural Patterns)
- 行为型模式(Behavioral Patterns)
具体都有哪些,网上资料随便一搜便出来了,笔者在这里不再列出来。
《设计模式》提到的 23 中经典设计模式,PHP 都有自己实现的方式,其中有些模式用的并不多,此外 PHP 中还有别的一些常用的模式,它们都有:
依赖注入模式(DependencyInjection)
服务定位器模式(ServiceLocator)
MVC模式
对象池模式(Pool)
数据访问对象模式(DAO)
流接口模式(Fluent Interface)
规约模式(Specification)
委托模式(Delegation)
Repository模式
...
Yii2设计模式
经笔者的归纳,Yii2用到的设计模式主要由下面的这些,根据类型可归纳为:
创建型
- 单例(Singleton)
- 工厂方法(FactoryMethod)
- 抽象工厂(AbstractFactory)
- 建造者(Builder)
- 原型(Prototype)
- 对象池(Pool)
行为型
- 观察者(Observer)
- 策略(Strategy)
- 模板方法(TemplateMethod)
- 迭代器(Iterator)
结构型
- 组合(Composite)
- 适配器(Adaptor)
- 桥接(Bridge)
- 装饰器(Decorator)
- 外观(Facade)
- 依赖注入(DependencyInjection)
- 流接口模式(Fluent Interface)
- 数据访问对象模式(DAO)
其他
- 服务定位器(ServiceLocater)
- MVC
- 委托模式(Delegation)
Yii2中设计模式,有些并不严格遵循《设计模式》中标准的定义和使用方法,甚至有时会表现出很大的差异性。但好在“形散而神不散”,细节虽偶有不同而精髓却是一样的。笔者将会帮助读者发现这些”隐藏极深“的使用技巧。
虽然笔者聊的对象是Yii2框架,然而实际目的是使大家熟悉设计模式,顺带的再聊下六大设计原则。最终的目的是提升大家在实际编码中的能力。
最后,给大家推荐一个好的开源项目 DesignPatternsPHP,对PHP所有常用的模式都有介绍和源码。另外,笔者自己的开源项目 design-pattern 也介绍了 PHP 常用的设计模式,大家都可结合着学习下。
Yii2 设计模式——Yii2 中用到哪些设计模式?的更多相关文章
- 设计模式 | Spring中用到的设计模式,你知道几个?
设计模式无处不在,因为它就来自于我们的日常生活,提炼于生活经验. 正握在你手中的手机,不能用220V的电压直接充电,需要一个专门的电源适配器(充电器)才行.摆在你桌上的电脑也是一样的,都需要" ...
- Yii2设计模式——Yii2中用到哪些设计模式?
"Yii2设计模式"包含了两个方面的内容:1.设计模式,2.Yii2框架. <设计模式>一书虽然以JAVA语言来表达设计模式的思想,但是设计模式远不限制于某一种特定的语 ...
- 【转载】OGRE中用到的设计模式
原文:OGRE中用到的设计模式 1. 单例模式(Singleton) 2. 工厂方法(Factory Method) 3. 适配器模式(Adapter) 4. ...
- 平时代码中用不到设计模式?Are you kidding me?
引子 平时我是个反应非常慢的人.有多慢呢?大概是两年前有次团队内部开会时,我听到同学说平时代码中用不到设计模式,我当时没有回答.两年后我终于反应过来了:“Are you kidding me?我每天都 ...
- Java设计模式(一):设计模式概述、UML图、设计原则
1 设计模式概述 1.1 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中. 1977年美国著名建筑大师.加利福尼亚大学伯克利分校环境结构 ...
- [Head First设计模式]山西面馆中的设计模式——观察者模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 引言 不知不自觉又将设计模式融入生活了,吃个饭也不得安生,也发现生活中的很多场景,都可以用设计模式来模拟.原来设计模式就在 ...
- [Head First设计模式]山西面馆中的设计模式——建造者模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 引言 将学习融入生活中,是件很happy的事情,不会感 ...
- [Head First设计模式]抢票中的设计模式——代理模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- [Head First设计模式]云南米线馆中的设计模式——模版方法模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
随机推荐
- C#异常:未将对象引用设置到对象的实例。
异常:未将对象引用设置到对象的实例. 一般是定义的变量或者数组等,没有赋初始值. 赋初始值后问题解决.
- ffmpeg奇数分辨率转码失败
偶然遇到将目的分辨率设置成奇数(例如:854x481)导致ffmpeg转码失败(错误:width not divisible by 2 (854x481)) 于是去查了一下原因:由于转码后的pix_f ...
- 非关系统型数据库-mangodb
第三十六课 非关系统型数据库-mangodb 目录 二十四 mongodb介绍 二十五 mongodb安装 二十六 连接mongodb 二十七 mongodb用户管理 二十八 mongodb创建集合. ...
- mysql的sql执行计划
实际项目开发中,由于我们不知道实际查询的时候数据库里发生了什么事情,数据库软件是怎样扫描表.怎样使用索引的,因此,我们能感知到的就只有 sql语句运行的时间,在数据规模不大时,查询是瞬间的,因此,在写 ...
- 安装openssh
在推进ansible用于配置管理与自动部署,其中一个很困扰的问题是创建ssh通道很慢,虽然ansible在同一个task里面是并行的控制多台受控端.但是每一个task都需要和受控端创建ssh通道,非常 ...
- 运维seq语法2
2017-03-02 09:47:42 # seq 1 10结果是1 2 3 4 5 6 7 8 9 10例二:#!/bin/bashfor i in `seq 1 10`;doecho $i;d ...
- L2-014 列车调度 (25 分)
L2-014 列车调度 (25 分) 火车站的列车调度铁轨的结构如下图所示. 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道.每趟列车从入口可以选择 ...
- oracle针对某列让特定信息排序[decode]
在ORACLE查询中,如果在没有排序,但又想让某列中特定值的信息排到前面的时候,使用oracle的decode(字段,'字段值',数字) 如 select name from user 查询出来的所有 ...
- arcgis 添加经纬度坐标点
ArcGIS 10.2导入X.Y坐标(经度.纬度),生成Shapefile点数据 参考博客很完整 基站-纬度-经度 1---- 2----X 经度 Y 纬度 Z高程(没有) 3---一开始只定 ...
- Vue Baidu Map局部注册实现和地图绘点
需求:在vue项目中,实现用户选择地图绘点或者通过搜索关键字选点 <template> <div id="home"> <h2>首页地图< ...