一、设计模式简介

首先我们来认识一下什么是设计模式:
设计模式是一套被反复使用、容易被他人理解的、可靠的代码设计经验的总结。
设计模式不是Java的专利,我们用面向对象的方法在PHP里也能很好的使用23种设计模式。

那么我们常说的架构、框架和设计模式有什么关系呢?
架构是一套体系结构,是项目的整体解决方案;框架是可供复用的半成品软件,是具体程序代码。架构一般会涉及到采用什么样的框架来加速和优化某部分问题的解决,而好的框架代码里合理使用了很多设计模式。

相关推荐:《ThinkPHP教程

二、提炼设计模式的几个原则:

(1)开闭原则:模块应对扩展开放,而对修改关闭。
(2)里氏代换原则:如果调用的是父类的话,那么换成子类也完全可以运行。
(3)依赖倒转原则:抽象不依赖细节,面向接口编程,传递参数尽量引用层次高的类。
(4)接口隔离原则:每一个接口只负责一种角色。
(5)合成/聚合复用原则:要尽量使用合成/聚合,不要滥用继承。

三、设计模式的功用?

设计模式能解决替换杂乱无章的代码,形成良好的代码风格代码易读,工程师们都能很容易理解增加新功能时不用修改接口,可扩展性强
稳定性好,一般不会出现未知的问题设计模式不能解决:

(1)设计模式是用来组织你的代码的模板,而不是直接调用的库;
(2)设计模式并非最高效,但是代码的可读性和可维护性更重要;
(3)不要一味追求并套用设计模式,重构时多考虑。

四、设计模式分类

1、创建型模式:

单例模式、工厂模式(简单工厂、工厂方法、抽象工厂)、创建者模式、原型模式。

2、结构型模式:

适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。

3、行为型模式:

模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。

thinkphp5用了哪些设计模式的更多相关文章

  1. ThinkPHP设计模式与Trait技术

    阅读原文 设计模式 单例模式 class Site { //属性 public $siteName; //本类的静态实例 protected static $instance = null; //禁用 ...

  2. thinkphp5.0架构总览

    ThinkPHP5.0应用基于MVC(模型-视图-控制器)的方式来组织. MVC是一个设计模式,它强制性的使应用程序的输入.处理和输出分开.使用MVC应用程序被分成三个核心部件:模型(M).视图(V) ...

  3. thinkPHP5.0的学习研究【架构】

    2017年6月19日18:51:53 架构:1.ThinkPHP5.0应用基于MVC(模型-视图-控制器)的方式来组织.2.MVC是一个设计模式,它强制性的使应用程序的输入.处理和输出分开.使用MVC ...

  4. thinkphp5升级版开源框架tpframe v2.1发布

    免费开源框架tpframe是一款以thinkphp5为驱动,在此基础上进行进一步的完善与改进的框架,保持了ThinkPHP5原有的所有特性,优化核心,减少依赖,为个人或企业建站提供高效.快速解决的方案 ...

  5. thinkphp5框架笔记(ing)

    重新整理下学习tp5手册的笔记.自己再好好看一次tp5的开发手册,学到哪里记到哪里. 0x01 安装 Composer安装 ThinkPHP5支持使用Composer安装 curl -sS https ...

  6. ThinkPHP5 基础知识入门 [入门必先了解]

    一.目录结构 下载最新版框架后,解压缩到web目录下面,可以看到初始的目录结构如下: project 应用部署目录 ├─application 应用目录(可设置) │ ├─common 公共模块目录( ...

  7. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  8. TODO:macOS上ThinkPHP5和Semantic-UI集成

    TODO:macOS上ThinkPHP5和Semantic-UI集成 1. 全局安装 (on OSX via homebrew)Composer 是 homebrew-php 项目的一部分 2. 把X ...

  9. java EE设计模式简介

    1.何为设计模式 设计模式提供了对常见应用设计问题的解决方案.在面向对象的编程中,设计模式通常在解决与对象创建和交互相关的问题,而非整体软件架构所面对的大规模问题,它们以样板代码的形式提供了通用的解决 ...

随机推荐

  1. java--Date时间

    Date: 表示特定的瞬间,精确到毫秒,通过方法设定自己所表示的时间,可以表示任意的时间 System.currentTimeMillis() :返回的当前系统时间, 1970-1-1 至今的毫秒数 ...

  2. 隐马尔科夫模型(Hidden Markov Models) 系列之四

    转自:http://blog.csdn.net/eaglex/article/details/6430389 前向算法(Forward Algorithm) 一.如果计算一个可观察序列的概率?   1 ...

  3. brew安装mongodb报错Error: No available formula with the name 'mongodb'

    原因:MongoDB不再是开源的了,并且已经从Homebrew中移除 #43770 设定:  $ brew tap mongodb/brew 安装: $ brew install mongodb-co ...

  4. 前端性能优化 css和js的加载与执行

    一个网站在浏览器端是如何进行渲染的? html本身首先会被渲染成 DOM 树,实际上 html 是最先通过网址请求过来的,请求过来之后,html 本身会由一个字节流转化成一个字符流,浏览器端拿的就是字 ...

  5. Linux权限设置基础

    chmod   linux系统中文件或目录有两个属性:访问权限和文件所有者,简称“权限”和“归属”. 访问权限包括:读取.写入.可执行. 归属包括:属主(拥有该文件的用户).属组(拥有该文件的用户组) ...

  6. Python使用进程间共享变量来控制两个进程(监听键盘和相机录制)的交互

    我有个简单的应用需求: 1. 该应用随时会监听键盘的输入: 2. 当输入指定键时会控制相机录制的启动和关闭. 监听键盘是一个事件循环,相机录制也是一个循环录制的过程.我试着用 Python 启动两个进 ...

  7. request.user怎么来的

    1.登录认证(auth认证登录后login后设置了session等信息包含用户的pk)      >>>>>               2.用户再次请求登录的时候,通过 ...

  8. Logstash连接Elasticsearch异常

    1.背景 elasticsearch集群默认配置启动ok,logstash连接向里面发数据ok. 2.出现问题 修改elasticsearch.yml中的cluster.name,改为 esabc 然 ...

  9. windows 上robot framework 读取sqlite3提示:OperationalError: unable to open database file错误

    原因:路径写的不正确. 正确的写法:'D:/Python27/163/demo.db' 或者 r 'E:\\rf-demos-master\\DatabaseDemo\\demo.db' Connec ...

  10. mdk编译器学习笔记(1)——序

    这两天,学习了keil-mdk编译器的特性,这基本上独立于c语言语法,平时基本上都在强调c语言的学习,但是编译器的学习我们也要注重,类似于gcc一样,不也有很多网上的资料,讲述gcc的特性和用法吗.作 ...