”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常用的设计模式,大家都可结合着学习下。

最新文章

  1. Webview获取H5页面js方法参数
  2. java写入和写出EXCEL(含源代码)
  3. zookeeper 3.4.6启动流程粗略梳理
  4. Firefox Security Toolkit 安装
  5. 学习S5
  6. 关于mIdleHandlers 空闲消息
  7. 两个有关Knockout自定义拓展方法fn的小技巧
  8. 如何排版 微信公众号「代码块」之 MarkEditor
  9. 使用ServletContextListener和HttpSessionListener两种监听器实现记录当前网站在线人数
  10. HDU---Labyrinth
  11. JavaScript高级程序设计 - 阅读笔记
  12. Spark性能调优之JVM调优
  13. EF实体实现链接字符串加密
  14. PHP 二维数组排序保持键名不变
  15. Jenkins pipeline job 根据参数动态获取触发事件的分支
  16. Flutter不完全安裝指南(AndroidStudio集成)
  17. 让Spring Boot项目启动时可以根据自定义配置决定初始化哪些Bean
  18. Android JNI 学习(五):References Api
  19. Makefile 系统论述
  20. C# 面向对象的base的使用

热门文章

  1. C#之Socket的简单使用
  2. ReactJs 的各个版本生命周期、API变化 汇总(一、V16.0.0)
  3. 个人简历模板web
  4. JS原型--原型链
  5. Redis主从同步要深入理解?一篇文章足矣!
  6. jQuery实现全选、反选和不选功能
  7. Dynamics 365 CE命令栏按钮点击后刷新表单页面方法
  8. 小程序后端项目【Springboot框架】部署到阿里云服务器【支持https访问】
  9. SpringCloud警告(Eureka):EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
  10. CSS3D 转换调试