一、设计模式简介

首先我们来认识一下什么是设计模式:
设计模式是一套被反复使用、容易被他人理解的、可靠的代码设计经验的总结。
设计模式不是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. JavaWeb 分层设计、MVC

    M:Model,JavaBean. V:View,JSP. C:Controller,Servlet. Servlet: 接受用户请求,把请求参数封装为一个JavaBean,调用service来处理业 ...

  2. Fundebug前端JavaScript插件更新至1.8.0,兼容低版本的Android浏览器

    摘要: 兼容低版本Android浏览器,请大家及时更新. Fundebug前端BUG监控服务 Fundebug是专业的程序BUG监控平台,我们JavaScript插件可以提供全方位的BUG监控,可以帮 ...

  3. 【学习笔记】大数据技术原理与应用(MOOC视频、厦门大学林子雨)

    1 大数据概述 大数据特性:4v volume velocity variety value 即大量化.快速化.多样化.价值密度低 数据量大:大数据摩尔定律 快速化:从数据的生成到消耗,时间窗口小,可 ...

  4. 黑白之间的FastFlux

    DNS请求 通常我们对一个域名进行DNS请求,尤其是A记录,一般在一段时间内是不变的,其结果的异同也就是可能因地域而得到不同的结果.当然这个结果可能是个集合,也可能是一个IP地址.因为我们要考虑到CD ...

  5. Linux Firewalld 基础实例

    本次是一个Firewalld的基础操作实例,利用Firewalld图形操作界面进行访问控制操作. 实验拓扑 需求分析 首先拓扑涉及到两个区域,这里使用work和public区域,分别做相应的规则. 1 ...

  6. 一文教你如何使用miniconda

    安装python 之前安装python包,导致了python里面的包不兼容,用管理工具卸载也下载不掉,重新安装也安装不上,没有办法只能卸掉python重装. 安装Anaconda Anaconda指的 ...

  7. Android Studio总结

    课程背景 相信大家对Android Studio已经不陌生了,Android Studio是Google于2013 I/O大会针对Android开发推出的新的开发工具,目前很多开源项目都已经在采用,G ...

  8. BeyondCorps

    This repository provides a short description of the BeyondCorp security model and resources for impl ...

  9. 第08节-开源蓝牙协议栈BTStack数据处理

    本篇博客根据韦东山的视频整理所得. 在上篇博客,通过阅读BTStack的源码,大体了解了其框架,对于任何一个BTStack的应用程序都有一个main函数,这个main函数是统一的.这个main函数做了 ...

  10. JDK9下载与安装

    1.进入oracle官网下载页面 https://www.oracle.com/downloads/index.html 2.点击Menu 3.点击JAVA SE 4.点击JDK Download 5 ...