php模式之装饰器模式1

2023-11-05

原文来自(大胖博客

装饰器模式,也成修饰器模式。目的是给现有的对象增加或修改成新逻辑。说人话就是不改变对象的情况下,给对象的某个操作增加前置操作或者后置操作(当然也有可能改变操作的逻辑)。
举个栗子:
我们在操作数据库的时候会从数据库拉取数据,拉取数据的动作是 loadData,那么就可以针对loadData操作进行“装饰器”的封装。
1. 实现loadData接口,接口这里的目的是所有加载数据的地方都有一个统一的规范
[php]
interface loadDataInterface{
    function loadData($where);
}
[/php]

2. 实现上面的接口来封装model层
[php]
//db 是数据库的封装
class user extends db implements loadDataInterface{
    function loadData($where){
        //$this->db->query($where)
    }
}
[/php]
(一般情况下,做完上面两部,就完成了第一阶段的需求,如果后续阶段,需要在拉取用户数据后要执行特定的操作,比如说拉取了多少数据,怎么办呢?继续往下。。。)

3. 做一个装饰器
[php]
//装饰器封装了前置操作,和后置操作
abstract class loadDataDecorator implements loadDataInterface{
    public $handle = null;
    public $where = null;
    function __construct(loadDataInterface $handle){
        $this->handle = $handle;
    }

    abstract function loadBefore();
    abstract function loadAfter();

    function load($where){
        $this->where = $where
        $this->loadBefore();
        $this->handle->load($this->where);
        $this->loadAfter();
    }
}
[/php]

4. 实现拉取数据后记录数量的操作
[php]
class loadDataAfterCount extends loadDataDecorator{
    //因为装饰器一并封装了前置操作,这里留空就行
    function loadBefore(){
        //do nothing
    }

    function loadAfter(){
        //$this->db->queryCount($this->where)
    }
}
[/php]

5. 使用装饰器
[php]
$userModel = new loadDataAfterCount(new User)
$userModel->loadData();
[/php]

装饰器带来的思考:
有些同学可能注意到了,如果要实现拉取用户后记录多少数据被拉取,那么直接改 User::loadData 多方便,一句话的事,为啥要费老大的劲做真么多的操作呢?!其实封装的目的是代码(或者说逻辑)的重复可用,现在需要拉取用户后记录数据量,那么如果来去其他的数据后也记录呢?如果不仅仅是记录还有更多的更复杂的逻辑呢?这个时候,封装的好处就尤为明显了,只需在需要添加逻辑的位置“装饰”一下,这个世界就又那么美丽了~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php模式之装饰器模式1 的相关文章

  • Java复习-25-单例设计模式

    单例设计模式 目的 使用场景 在实际开发下 会存在一种情况 某一种类在程序的整个生命周期中 只需要实例化一次就足够了 例如 系统数据类 由于操作系统只有一个 因此在程序初始化时该类只需要实例化一次 之后的系统数据更改都是在这一个实例化对象中
  • python语法(高阶)-设计模式(单例模式)

    参考内容 黑马程序员
  • 行为型模式-策略模式

    package per mjn pattern strategy 抽象策略类 public interface Strategy void show package per mjn pattern strategy 具体策略类 用来封装算法
  • 离散仿真引擎基础作业与练习

    作业内容 一 简答题 1 解释 GameObjects 和 Assets 的区别与联系 2 下载几个游戏案例 分别总结资源 对象组织的结构 3 使用 debug 验证 MonoBehaviour 基本行为或事件触发条件 4 了解 GameO
  • 设计模式学习笔记(一)之单例模式

    单例模式 作用 保证一个类只有一个实例 并且提供访问这个实例的全局访问点 应用场景有 数据库连接池 spring中 Bean默认是单例 Servlet中 每一个Servlet是单例 配置文件的类 一般是单例 优点 单例只生成一个实例 减少系
  • C++ 装饰器模式

    什么是装饰器模式 装饰器模式是一种结构型设计模式 实现了在不改变现有对象结构的的同时又拓展了新的功能 装饰器本质上是对现有对象的重新包装 同时装饰器又称为封装器 如何理解装饰器模式 以笔记本电脑为例 当我们购买了一台新笔记本电脑 但我们发现
  • 设计模式之享元模式

    一 背景 在面向对象程序设计过程中 有时会面临要创建大量相同或相似对象实例的问题 创建那么多的对象将会耗费很多的系统资源 它是系统性能提高的一个瓶颈 例如 围棋和五子棋中的黑白棋子 图像中的坐标点或颜色 局域网中的路由器 交换机和集线器 教
  • Java 多线程模式 —— Guarded Suspension 模式

    Part1Guarded Suspension 模式的介绍 我们只从字面上看 Guarded Suspension 是受保护暂停的意思 1Guarded Suspension 模式 在实际的并发编程中 Guarded Suspension
  • 设计模式(5)-适配器模式(Adapter Pattern)

    适配器模式 Adapter Pattern 顾名思义 就像变压器 转接头差不多 就像美国的生活电压是110V 中国是220V 就需要一个变压器将220V转换成110V 或者一个Type C接口想插如USB接口的东西 你就需要一个转换器 而这
  • 设计模式--提供者模式provider

    设计模式 C 提供者模式 Provider Pattern 介绍 为一个API进行定义和实现的分离 示例 有一个Message实体类 对它的操作有Insert 和Get 方法 持久化数据在SqlServer数据库中或Xml文件里 根据配置文
  • linux内核中的设计模式

    创建型 Object Pool Object Pool模式可以提升性能 尤其是在对象的分配 初始化成本高 使用频率高 但使用时间短的情况下 对象池可以设置对象池的大小和回收时间缓存预分配的对象 NT和Linux都有简单的预分配缓存对象的机制
  • Tomcat 系统架构与设计模式之工作原理篇

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

    面试中经常问到设计模式 我才对这个东西了解了一下 才发现他是没有开发的新大陆 是oo设计的更高级别 能把设计模式搞懂 那oo你就搞的差不多了 随便看了还是很有意思的 虽然不怎么懂 百科名片 相关书籍 设计模式 Design pattern
  • 泛型与反射机制在JDBC和Servlet编程中的实践

    写在前面 泛型与反射是java中的两种强大机制 可以很好的提高代码的灵活性和复用性 本篇文章向大家展现在JDBC和Servlet编程场景下反射和泛型技术的实践 通过灵活使用这两种机制打造 高度可复用的JDBC和Servlet代码 1 JDB
  • 在AI技术的无情侵袭下,学学Java的23种设计模式还是非常有必要的

    目前国内80 程序员的主要工作是调用组合api实现各种业务需求 在顶层架构师设定好的框架下 做着重复且无聊的编码工作 如果未来ai被广泛应用 那么被替代的风险是很高的 比较扎心的是 其实目前用ai生成片段代码已经是各个公司比较普遍的做法了
  • Java设计模式:模板方法模式

    作者主页 欢迎来到我的技术博客 个人介绍 大家好 本人热衷于 Java后端开发 欢迎来交流学习哦 如果文章对您有帮助 记得 关注 点赞 收藏 评论 您的支持将是我创作的动力 让我们一起加油进步吧 文章目录 一 模板方法模式的定义 二 模板方
  • 设计模式 原型模式 与 Spring 原型模式源码解析(包含Bean的创建过程)

    原创 疯狂的狮子Li 狮子领域 程序圈 2023 12 19 10 30 发表于辽宁 原型模式 原型模式 Prototype模式 是指 用原型实例指定创建对象的种类 并且通过拷贝这些原型 创建新的对象 原型模式是一种创建型设计模式 允许一个
  • 设计模式 原型模式 与 Spring 原型模式源码解析(包含Bean的创建过程)

    原创 疯狂的狮子Li 狮子领域 程序圈 2023 12 19 10 30 发表于辽宁 原型模式 原型模式 Prototype模式 是指 用原型实例指定创建对象的种类 并且通过拷贝这些原型 创建新的对象 原型模式是一种创建型设计模式 允许一个
  • 系列一、 单例设计模式

    一 单例设计模式 1 1 概述 单例模式 Singleton Pattern 是Java中最简单的设计模式之一 这种类型的设计模式属于创建者模式 它提供了一种创建对象的最佳方式 这种模式涉及到一个单一的类 该类负责创建自己的对象 同时确保只
  • 【设计模式之美】 SOLID 原则之五:依赖反转原则:将代码执行流程交给框架

    文章目录 一 控制反转 IOC 二 依赖注入 DI 三 依赖注入框架 DI Framework 四 依赖反转原则 DIP 一 控制反转 IOC 通过一个例子来看一下 什么是控制反转 public class UserServiceTest

随机推荐

  • 基于MATLAB的遗传算法优化混合流水车间调度问题

    基于MATLAB的遗传算法优化混合流水车间调度问题 混合流水车间调度问题是在车间生产中常见的一个优化问题 旨在通过合理安排作业顺序和机器分配 最大限度地提高生产效率和降低生产成本 本文将介绍如何使用MATLAB编写遗传算法来解决混合流水车间
  • Ubuntu ssh root 登录不了解决办法

    Ubuntu在安装的时候 设置了sudo的密码 但是这并不是root用户的密码 导致即使修改了 etc ssh sshd config 文件 运行root用户登录 还是会出现Permission denied 真是坑啊 差点没把我气到吐血
  • 发送html邮件时遇到的奇怪的乱码问题

    解析文件字符流 作为内容发送邮件到客户端 解析的代码如下 BufferedReader reader new BufferedReader new FileReader file 发现windows系统下发送的邮件时是正常的 在linux下
  • NETPLIER : 一款基于概率的网络协议逆向工具(一)理论

    本文系原创 转载请说明出处 信安科研人 关注微信公众号 信安科研人 获取更多网络安全学术技术资讯 今日介绍一篇发表在2021 NDSS会议上的一项有关协议逆向的工作 文章目录 1 网络协议逆向工程简介 1 1 协议逆向工程的主流技术 案例
  • 【计算机网络】第一章知识点汇总

    第一章学习重点 2 5 因特网的组成 通信方式与交换方式 4 4 时延 计算 4 5 时延带宽积 计算 5 2 协议的划分与层次 5 3 五层协议的体系结构 OSI与TCP IP的比较 1 计算机网络在信息时代的作用 三网融合中的 三网 指
  • Hadoop-HBase 单机部署

    一 系统版本 Linux系统 wdOS 1 0 x86 64 iso 关于wdOS说明 1 安装简单 快速 去掉了安装过程中不必要的烦锁操作和不必要的选择 2 可选安装集成web环境 如lamp lnmp lnamp 并可相互自由切换使用
  • 设计模式之适配器模式(Adapter)

    1 定义 适配器模式 Adapter 指的是将一个类的接口转换成另一个可以兼容的接口 比如我们日常生活中的转换头 古早时期使用的电池万能充 就相当于程序中使用的适配器模式 2 适配器模式的种类 2 1 类适配器模式 类适配器模式通过多重继承
  • 大数据项目实战——基于某招聘网站进行数据采集及数据分析(三)

    大数据项目实战 第三章 数据采集 文章目录 大数据项目实战 学习目标 一 分析与准备 1 分析网页结构 2 数据采集环境准备 二 采集网页数据 1 创建响应结果 JavaBean 类 2 封装 HTTP 请求的工具类 1 定义三个全局变量
  • 14张自动化测试框架结构图(建议收藏)

    1 接口自动化测试框架设计图 接口自动化测试框架设计图 2 接口自动化执行设计图 接口自动化执行设计图 3 API自动化平台框架设计图 API自动化平台框架设计图 4 UI自动化测试框架设计图 UI自动化测试框架设计图 5 接口 UI自动化
  • 【CUDA基础练习】向量内积计算的若干种方法

    先从一个简单 直观的方法来了解如何用CUDA计算向量内积 向量内积既然是将两个向量对应元素相乘的结果再求和 我们先考虑将对应元素相乘并行化 再来考虑相加 方法一 include
  • 十八、kubernetes中容器重启策略

    1 概述 在上一篇文章中 一旦容器探测出现了问题 kubernetes就会对容器所在的Pod进行重启 其实这是由pod的重启策略决定的 pod的重启策略有 3 种 分别如下 Always 容器失效时 自动重启该容器 这也是默认值 OnFai
  • oracle行转列(PIVOT),列转行(UNPIVOT)

    1 行转列 PIVOT 现有 学生 分数表 STUDENT SCORE 如下 想看到每个学生语数外的整体分数情况 这时候可以应用行转列 PIVOT SELECT FROM STUDENT SCORE PIVOT SUM SCORE FOR
  • C++应用到C# ref , out

    include stdafx h include iostream h int factor int int int void main int number squard cubed error cout lt lt Enter the
  • 泰勒展开式求sin(x)

    include
  • Java架构直通车——分布式唯一 ID生成方案

    文章目录 分布式ID的几种生成方案 UUID MySQL主键自增 数据库自增ID改进方案 雪花算法 SnowFlake 雪花算法的优化 Redis自增id Zookeeper有序节点 最近要做区块链项目 要生成很多唯一ID做业务号之类的 所
  • 快速排序算法的Python实现 (头歌实践教学平台)

    任务描述 本关任务 编写代码实现快速排序 相关知识 为了完成本关任务 你需要掌握 1 如何实现快速排序 2 快速排序的算法分析 快速排序 快速排序使用了和归并排序一样的分而治之策略 它的思路是依据一个 基准值 数据项来把列表分为两部分 小于
  • lyapunov优化

    Lyapunov optimization是Michael J Neely发展起来的网络优化理论 可以参考 1 2 因为网络研究中缺乏理论 简单好使的算法 没有高大上的公式吓人 好像就不能发到高级别的期刊上 Lyapunov optimiz
  • 关系型数据库与非关系型数据库的区别

    文章目录 1 关系型数据库 1 1 概念 1 2 优点 1 3 瓶颈 2 从关系型到非关系型 3 非关系型数据库 3 1概念 3 2分类 3 3 缺点 4 对比 4 1 存储上 4 2 事务 4 3 数据集 4 4 结构 1 关系型数据库
  • Ubuntu安装时:downloading language packs

    ubuntu 安装时 问题 downloading language packs 如果网络不好 持续能达到几个小时 解决办法 切断网络连接 安装完后 还可以再安装
  • php模式之装饰器模式1

    原文来自 大胖博客 装饰器模式 也成修饰器模式 目的是给现有的对象增加或修改成新逻辑 说人话就是不改变对象的情况下 给对象的某个操作增加前置操作或者后置操作 当然也有可能改变操作的逻辑 举个栗子 我们在操作数据库的时候会从数据库拉取数据 拉