PHP 23种设计模式

2023-11-10

设计模式的目的:

  1. 重用性 (相同功能的代码,不用多次编写)
  2. 可读性 (编程规范性, 便于其他程序员的阅读和理解)
  3. 可扩展性 (当需要增加新的功能时,非常的方便,称为可维护)
  4. 可靠性 (当我们增加新的功能后,对原来的功能没有影响)
  5. 使程序呈现高内聚,低耦合的特性

设计模式的七大原则:

  1. 单一职责原则:一个类应该只负责一项职责
  2. 接口隔离原则:一个类对另一个类的依赖应该建立在最小的接口上。客户端不应该依赖它不需要的接口
  3. 依赖倒转(倒置)原则:对抽象进行编程,不要对实现进行编程。程序要依赖于抽象接口,不要依赖于具体实现
  4. 里氏替换原则:子类可以扩展父类的功能,但不能改变原有父类的功能
  5. 开闭原则:又叫开放封闭原则。对扩展开发,对修改关闭
  6. 迪米特法则:又叫最少知识原则。一个类对于其他类知道的越少越好
  7. 合成复用原则:又叫组合/聚合复用原则。通过将已有的对象纳入新对象中,作为新对象的成员对象来实现的,新对象可以调用已有对象的功能,从而达到复用。软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现

创建型模式:

  • 单例模式
  • 抽象工厂模式
  • 原型模式
  • 建造者模式
  • 工厂模式

结构型模式:

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

行为型模式:

  • 模版方法模式
  • 命令模式
  • 访问者模式
  • 迭代器模式(Iterator)(生成器模式(generator)是迭代器的一种,即迭代器的实现)
  • 观察者模式
  • 中介者模式
  • 备忘录模式、
  • 解释器模式(Interpreter)
  • 状态模式
  • 策略模式
  • 职责链模式(责任链模式)
     
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 23种设计模式 的相关文章

  • Spring源码学习之BeanDefinition源码解析

    本文作者 磊叔 GLMapper本文链接 https juejin cn post 6844903553820000269 Bean的定义主要由BeanDefinition来描述的 作为Spring中用于包装Bean的数据结构 今天就来看看
  • Chain of Responsibility:责任链模式

    现有多个处理者 这些处理者可以处理不同的请求 这些处理者有等级关系 每个处理者都有更上级的处理者 对于最上级的处理者 可以没有上级 对于一个上级处理者 可以有多个下级处理者 客户端发出了一个请求 请求被传递给一个最下级处理者 而该处理者无法
  • 常用设计模式总结

    设计模式的相关知识 很多书籍和博客中都有详细总结 本文总结的目的 1 将自己学习到的设计模式的知识按照自己的逻辑重新总结 方便查看和记忆 2 方便让自己对设计模式中常用的知识有一个系统的认知 设计模式 话设计模式 书中提到 24 种设计模式
  • 设计模式三: 代理模式(Proxy) -- JDK的实现方式

    简介 代理模式属于行为型模式的一种 控制对其他对象的访问 起到中介作用 代理模式核心角色 真实角色 代理角色 按实现方式不同分为静态代理和动态代理两种 意图 控制对其它对象的访问 类图 实现 JDK自带了Proxy的实现 下面我们先使用JD
  • 面向过程和面向对象的语言有哪些,以及优缺点(一篇文章让你理解)

    C语言是面向过程的 而C python java是面向对象的 面向过程的编程思想将一个功能分解为一 个一个小的步骤 我们通过完成一个一 个的小的步骤来完成一个程序 优点 这种编程方式 符合我们人类的思维 编写起来相对比较简单 缺点 但是这种
  • C++设计模式-State状态模式

    State状态模式作用 当一个对象的内在状态改变时允许改变其行为 这个对象看起来像是改变了其类 UML图如下 State类 抽象状态类 定义一个接口以封装与Context的一个特定状态相关的行为 ConcreteState类 具体状态 每一
  • 设计模式学习之装饰器模式

    装饰器 Decorator 模式跟适配器 Adapter 模式一样 属于构建型设计模式 在学习适配器模式的时候说过 适配器模式的重点在复用能力 装饰器模式的重点在扩展能力 换言之 装饰器模式是先复用后扩展 这也导致了很多人跟适配器模式混淆
  • 设计模式 -- 工厂模式(Factory Pattern)

    简单工厂模式 Simple Factory Pattern 根据传入的参数决定实例化哪个对象 优点 不直接在客户端创建具体产品的实例 降低了耦合性 缺点 违反了开闭原则 对扩展开放 对修改关闭 不容易形成高内聚松耦合结构 每当我们增加一种产
  • Java并发编程之设计模式

    同步模式之保护性暂停 1 定义 即 Guarded Suspension 用在一个线程等待另一个线程的执行结果 要点 有一个结果需要从一个线程传递到另一个线程 让他们关联同一个 GuardedObject 如果有结果不断从一个线程到另一个线
  • 单例模式的八种写法比较

    单例模式是最常用到的设计模式之一 熟悉设计模式的朋友对单例模式都不会陌生 一般介绍单例模式的书籍都会提到 饿汉式 和 懒汉式 这两种实现方式 但是除了这两种方式 本文还会介绍其他几种实现单例的方式 让我们来一起看看吧 简介 单例模式是一种常
  • Tomcat 系统架构与设计模式之工作原理篇

    本文以 Tomcat 5 为基础 也兼顾最新的 Tomcat 6 和 Tomcat 4 Tomcat 的基本设计思路和架构是具有一定连续性的 Tomcat 总体结构 Tomcat 的结构很复杂 但是 Tomcat 也非常的模块化 找到了 T
  • [C++]外观模式

    外观模式 Facade Pattern 隐藏系统的复杂性 并向客户端提供了一个客户端可以访问系统的接口 这种类型的设计模式属于结构型模式 它向现有的系统添加一个接口 来隐藏系统的复杂性 这种模式涉及到一个单一的类 该类提供了客户端请求的简化
  • [设计模式]模板方法模式(Template Method)

    1 意图 定义一个操作中的算法的骨架 而将一些步骤延迟到子类中 TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 2 动机 其实就是如意图所描述的 算法的骨架是一样的 就是有些特殊步骤不一样 就可以
  • 设计模式之访问者模式

    访问者模式 把被操作的对象作为元素 可变可拓展的操作作为访问者 可以说访问者中有很多操作 然后访问者访问元素 对该元素进行操作 不同的访问者有不同的操作 案例 定义访问者接口 public interface UniversalVisito
  • 组合型模式

    概述 对于这个图片肯定会非常熟悉 上图我们可以看做是一个文件系统 对于这样的结构我们称之为树形结构 在树形结构中可以通过调用某个方法来遍历整个树 当我们找到某个叶子节点后 就可以对叶子节点进行相关的操作 可以将这颗树理解成一个大的容器 容器
  • 【设计模式】工厂模式(Factory Pattern)

    1 概述 工厂模式 Factory Pattern 是最常用的设计模式之一 它属于创建类型的设计模式 它提供了一种创建对象的最佳方式 在工厂模式中 我们在创建对象时不会对客户端暴露创建逻辑 并且是通过一个共同的接口来指向新创建的对象 工厂模
  • 设计模式(3)--对象结构(5)--外观

    1 意图 为子系统中的一组接口提供一个一致的界面 Facade模式定义了一个高层接口 这个接口使得 这一子系统更加容易使用 2 两种角色 子系统 Subsystem 外观 Facade 3 优点 3 1 对客户屏蔽了子系统组件 减少了客户处
  • 系列一、 单例设计模式

    一 单例设计模式 1 1 概述 单例模式 Singleton Pattern 是Java中最简单的设计模式之一 这种类型的设计模式属于创建者模式 它提供了一种创建对象的最佳方式 这种模式涉及到一个单一的类 该类负责创建自己的对象 同时确保只
  • 2023 年精选:每个 DevOps 团队都应该了解的 5 种微服务设计模式

    微服务彻底改变了应用程序开发世界 将大型整体系统分解为更小 更易于管理的组件 这种架构风格的特点是独立 松散耦合的服务 带来了从可扩展性 模块化到更高的灵活性等众多优势 DevOps 团队如何最好地利用这种方法来实现最高效率 答案在于理解并
  • C++设计模式 --1.工厂模式和单例模式

    文章目录 1 工厂模式 简单工厂模式 工厂方法模式 抽象工厂模式 2 单例模式 懒汉式 饿汉式 1 工厂模式 简单工厂模式

随机推荐

  • JPA多条件查询之AND和OR混合查询

    JPA多条件查询这种业务场景是很常见的 比如说这种 像这种同一个查询条件可以多选的用OR语句来查询 比如 材质 之间选了 PU 和 橡胶 就用OR 不同查询条件之间则用AND语句查询 比如 品牌 和 材质 之间就用AND拼接 我现在要根据不
  • 相对比较全的webpack5配置

    const path require path const MiniCssExtractPlugin require mini css extract plugin const HtmlWebpackPlugin require html
  • 【论文精读】CVPR2021 - ReDet:一种用于航空目标检测的旋转等变检测器

    论文精读 CVPR2021 ReDet 一种用于航空目标检测的旋转等变检测器 论文原文 R3Det Refined Single Stage Detector with Feature Refinement for Rotating Obj
  • 成为技术传播者(一):写在前面

    这几年一直是在传说中的 高科技行业 里混迹 于是也有幸体验了很多来自高科技的悖论 譬如说 专门开发OA的一家软件公司 自己没有一套像样的OA系统 所有的文档都靠MSN传来传去 或者放在机器上开共享访问 再譬如说 给别人做敏捷方法培训的一个家
  • 使用Python 和matlab 进行AR模型的仿真(自回归模型)

    对钙信号的动力学进行建模 AR模型 import matplotlib pyplot as plt import numpy as np if name main length 500 time range length gamma 0 9
  • 用Linux搭建chrony服务器同步时间

    准备工作 在准备之前需要准备两台虚拟机 一台当做服务器使用 另一台当作虚拟机客户端使用 具体方法 鼠标右键某一个虚拟机 gt 点击管理 gt 点击克隆 提示 克隆好虚拟机后 记得修改主机名和IP地址 不然就和第一台冲突了 修改IP地址 使用
  • Tomcat源码:CoyoteAdapter、Valve#invoke、ApplicationFilterChain

    前文 Tomcat源码 启动类Bootstrap与Catalina的加载 Tomcat源码 容器的生命周期管理与事件监听 Tomcat源码 StandardServer与StandardService Tomcat源码 Container接
  • 通过百度驾车API计算一天的总行程

    前提 我们在校车上安装了GPS定位器 每5秒发送一次GPS信息到服务器后台 表结构是这个样子的 名称 行驶日志表 代码 log bus drive 注释 维护行驶日志记录 名称 代码 数据类型 限定 注释 主键 bus drive id l
  • Linux简答

    1 静态库和动态库 2 gcc编译四个阶段 预处理 编译 汇编和链接 标准I O提供了三种类型的缓冲 分别是 单缓冲 双缓冲 循环缓冲 3 Vim的三种模式 命令模式 插入模式 底行模式 i键 进入编译模式 ctrl v 进入可视模式 ES
  • 并发编程系列之volatile内存语义

    前言 前面介绍顺序一致性模型时 我们提到了程序如果正确的同步就会具备顺序一致性 这里所说的同步泛指广义上的同步 其中包括就包括同步原语volatile 那么volatile声明的变量为什么就能保证同步呢 这又是如何实现的呢 今天就让我们一起
  • js混淆与反混淆

    介绍几种js混淆方式 1 eval混淆 js中的eval 方法 就是一个js语言的执行器 它能把字符串解析成javascript的语法进行执行 简单来说就是把原本的js代码当成eval方法的参数 据说此方法出来的第一天就被破解了 修改一下代
  • 用java实现数组单元素操作

    题目 1 如果字符串中的字符为大写字母 则转换为小写字母 2 如果字符串中的字符为小写字母 则直接输出 3 如果字符串中的字符不是字母 则过滤掉 首先明确如何输入字符数组 import java util Scanner class put
  • Web项目中使用容器对象

    要是使用Maven构建项目 首先需要加入Maven依赖
  • 以太坊的RPC机制

    1 go语言的RPC机制 RPC Remote Procedure Call 远程过程调用 是一种通过网络从远程计算机程序上请求服 务 而不需要了解底层网络细节的应用程序通信协议 RPC协议构建于TCP或UDP 或者是 HTTP 之上 允许
  • linux set o,Linux Set 和 shopt 命令

    用set命令可以设置各种shell选项或者列 出shell变量 单个选项设置常用的特性 在某些选项之后 o参数将特殊特性打开 在某些选项之后使用 o参数将关闭某些特性 不带任何参数的set命 令将显示shell的全部变量 除非遇到非法的选项
  • 报这样的错误 error: #35: #error directive: "Please select first th 解决方法

    右键点击工程名 选择第一个options for target 下面选择C C 在define文本框中输入 USE STDPERIPH DRIVER STM32F10X MD MD根据你选择的机种更换为LD或HD
  • 暴击事件

    在许多场景中 我们可能会遇到需要处理一种快速多次触发某事件 并处于某种阈值时 执行某一指定操作 例如 双击 即快速按鼠标左键两次 或更多击 连按键盘某键 某方法被执行数次等 其中 双击有对应的事件可以注册 然而 更多的情况是没有的类似事件方
  • JS中'true'==true为什么返回false

    相等操作符在转换不同的数据类型时 相等和不相等操作符遵循下列基本规则 如果有一个操作数是布尔值 则在比较相等性之前先将其转换为数值 false转换为0 而true转换为1 如果一个操作数是字符串 另一个操作数是数值 在比较相等性之前先将字符
  • OLED拼接屏连接方法,需要注意哪些事项?

    OLED拼接屏是由多个OLED屏幕拼接而成的大屏幕 可以用于展示大型广告 信息发布 舞台背景等场合 在拼接OLED屏幕时 需要注意接法 以确保整个屏幕的显示效果和稳定性 首先 需要选择合适的OLED屏幕 一般来说 拼接屏幕的每个单元都应该是
  • PHP 23种设计模式

    设计模式的目的 重用性 相同功能的代码 不用多次编写 可读性 编程规范性 便于其他程序员的阅读和理解 可扩展性 当需要增加新的功能时 非常的方便 称为可维护 可靠性 当我们增加新的功能后 对原来的功能没有影响 使程序呈现高内聚 低耦合的特性