”Yii2设计模式“包含了两个方面的内容:1.设计模式,2.Yii2框架。

《设计模式》一书虽然以JAVA语言来表达设计模式的思想,但是设计模式远不限制于某一种特定的语言,而是在面向对象编程中通用的思想,各个语言也都有各自的实现方式。

Yii2是一款优秀的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中用到哪些设计模式?的更多相关文章

  1. 设计模式 | Spring中用到的设计模式,你知道几个?

    设计模式无处不在,因为它就来自于我们的日常生活,提炼于生活经验. 正握在你手中的手机,不能用220V的电压直接充电,需要一个专门的电源适配器(充电器)才行.摆在你桌上的电脑也是一样的,都需要" ...

  2. Yii2 设计模式——Yii2 中用到哪些设计模式?

    Yii 2 设计模式“包含了两个方面的内容:1. 设计模式,2. Yii 2 框架. <设计模式>一书虽然以JAVA语言来表达设计模式的思想,但是设计模式远不限制于某一种特定的语言,而是在 ...

  3. 【转载】OGRE中用到的设计模式

    原文:OGRE中用到的设计模式 1.       单例模式(Singleton) 2.       工厂方法(Factory Method)  3.       适配器模式(Adapter)  4.  ...

  4. 平时代码中用不到设计模式?Are you kidding me?

    引子 平时我是个反应非常慢的人.有多慢呢?大概是两年前有次团队内部开会时,我听到同学说平时代码中用不到设计模式,我当时没有回答.两年后我终于反应过来了:“Are you kidding me?我每天都 ...

  5. Java设计模式(一):设计模式概述、UML图、设计原则

    1 设计模式概述 1.1 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中. 1977年美国著名建筑大师.加利福尼亚大学伯克利分校环境结构 ...

  6. [Head First设计模式]山西面馆中的设计模式——观察者模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 引言 不知不自觉又将设计模式融入生活了,吃个饭也不得安生,也发现生活中的很多场景,都可以用设计模式来模拟.原来设计模式就在 ...

  7. [Head First设计模式]山西面馆中的设计模式——建造者模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 引言 将学习融入生活中,是件很happy的事情,不会感 ...

  8. [Head First设计模式]抢票中的设计模式——代理模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...

  9. [Head First设计模式]云南米线馆中的设计模式——模版方法模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...

随机推荐

  1. TensorFlow从1到2(八)过拟合和欠拟合的优化

    <从锅炉工到AI专家(6)>一文中,我们把神经网络模型降维,简单的在二维空间中介绍了过拟合和欠拟合的现象和解决方法.但是因为条件所限,在该文中我们只介绍了理论,并没有实际观察现象和应对. ...

  2. android双待手机获取每一张SIM卡的imei

    /** * create a TelephonyInfo.java class */import java.lang.reflect.Method; import android.content.Co ...

  3. link/Extended dependency 无法显示连接

    把矩形控件先去掉,然后就能看到表与表之间的 link/Extended dependency 连线了.

  4. Shiro安全框架【快速入门】就这一篇!

    Shiro 简介 照例又去官网扒了扒介绍: Apache Shiro™ is a powerful and easy-to-use Java security framework that perfo ...

  5. python中的del

    python中的del,只删除变量,不删除数据,具体表现为: a=1,c=a,del a,(c=1) 和 a = [1,2,3,4,5] b= a[0] del a[0] print a ([2,3, ...

  6. 简述Java中的final关键字

    final关键字可用于修饰类.方法和变量,final修饰的类不能被继承:final修饰的方法不可被重写:final修饰的变量不可被改变. 1. final类 final修饰的类不能被继承意思是fina ...

  7. MVC、MVP、MVVM 模式对比

    MVC.MVP和MVVM这些开发模式为了分离视图(View)和模型(Model)而提出来的,直白说就是为了前后端分离. 1. MVC(Model View Controller)模式 MVC是比较直观 ...

  8. Spring IOC源码实现流程

    最近一段时间学习了IOC的源码实现,分享一下大概流程 创建一个测试类 代码如下: package com.zcg.learn.Test; import org.junit.Test;import or ...

  9. 白话kubernetes的十万个为什么(持续更新中...) - kubernetes

    Kubernetes简称? 答:k8s或kube. Kubernetes是什么? 答:由Google开发的一个强大的平台,可以在集群环境中管理容器化应用程序.本质上是一种特殊的数据库,里面存储的是能够 ...

  10. 统一修改表单参数(表单提交的空字符串统一转null)

    统一修改表单参数(表单提交的空字符串统一转null) 1.介绍: 我们业务中有时会遇到提交的表单中某个参数为空字符串,导致后台接受的为空字符串("")而不是我们理想中的null,会 ...