PHP 设计模式 简介

简单记录下关于设计模式第一篇学习笔记。

设计模式的学习需要在工程中实践并思考,只看概念是永远不会懂的。

但是,学习设计模式,并不意味着迷信模式,照葫芦画瓢,而是要学习每种设计模式解决的问题,以及为什么这样要这样设计,以及这样设计的好与坏。现有设计模式不可能是所有问题的最优解,但至少能提供思路。

要学习的其实在遇到问题时,如何设计软件解决问题。

预备知识

  • OOP: 类与对象,魔术方法,链式操作等。
  • PSR 规范: 命名空间,自动载入类,单入口等等。

PHP 中可以使用 ArrayAccess 实现配置文件的加载。

三种基本设计模式

工厂模式

由工厂方法(专门的类)生成对象,而不是直接在代码中 new。

常见使用场景有:在工厂方法中读取配置,生成可配置化的对象。

单例模式

某个类的对象,在一次生命周期中,只允许创建一个。(比如数据库操作对象)

注册模式

全局共享和交换对象。

OOP 基本原则

单一职责

一个类,只需要做好一件事。

开放封闭

一个类,应该是可以被扩展的,但不可以被外界轻易修改的。

依赖倒置

一个类,不应该强依赖另一个类,每个类对另一个类的依赖都是可替换的。

具有依赖关系的两个类之间需要通过依赖注入的方式去实现,而不要直接在类里面使用另一个类。

可配置化

尽可能地使用配置,而不是硬编码。即,类与类之间的依赖关系最好是写到配置文件当中去,而不要在具体的类中定义或者引入

面向接口编程

只需要关心接口,不需要关心实现。

MVC 设计结构

模型-视图-控制器,一种 C/SB/S 软件工程的组织方式。

模型

数据和存储的封装。

视图

展现层的封装。(如模版文件)

控制器

逻辑层的封装。

常用设计模式

适配器模式

可以将截然不同的函数接口封装成统一的 API。

  • 常见使用场景有:

    • PHP 的数据库操作扩展有 mysql, mysqli, pdo 3 种,可以用适配器模式统一成一致调用。
    • memcache, redis, file, apc 等不同的缓存函数,统一成一致调用。

策略模式

将一组特定的行为和算法封装成类,以适应某些特定的上下文环境。

  • 常见使用场景有:有一个电商网站,针对男女性用户各自跳转到不同的商品类目,并为其展示不同的广告。

使用策略模式可以实现 IoC,DI。

数据对象映射模式

是指将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作

在代码中常见的应用场景比如,实现一个 ORM 类,将复杂的 SQL 语句映射成对象属性的操作。

观察者模式

是指当一个对象状态发生改变时,依赖它的对象全部回收到通知,并自动更新。

要实现一个事件发生后,要执行一连串的更新操作,传统的编程方式,就是在事件的代码后面直接加入处理逻辑。当更新的逻辑增多后,代码就变得难以维护。

这种方式是耦合的,侵入式的,增加新的逻辑需要修改事件主体的代码。

使用观察者模式后,可以实现低耦合,非侵入式的通知与更新机制

  • 常见使用场景有: 在观察者类中实现数据更新事件的一系列更新操作。

装饰器模式

指的是,可以动态地添加修改类的功能。

一个类提供了一项功能,如果要在修改并添加额外的功能,传统的编程模式,需要写一个子类继承它,并重新实现类的方法。

使用装饰器模式,仅需要在运行时添加一个装饰器对象即可实现,可以实现最大的灵活性。

  • 常见使用场景有: 在装饰器中实现权限验证,模版渲染,JSON 串化等。

迭代器模式

指的是,在不需要了解内部实现的前提下,遍历一个聚合对象的内部元素。

相比于传统的编程模式,迭代器模式可以隐藏遍历元素所需要的操作。

代理模式

指的是,在客户端与实体之间,建立一个代理对象,客户端对实体进行操作全部委派给代理对象,隐藏实体的具体实现细节。所谓的实体指的是,数据库中的实体数据。

Proxy 还可以与业务代码分离,部署到另外的服务器。业务代码中通过 RPC 来委派任务。

  • 常见使用场景有: 实现数据库的主从自动切换。

参考

Powered by Hexo and Hexo-theme-hiker

Copyright © 2017 - 2023 Keep It Simple And Stupid All Rights Reserved.

访客数 : | 访问量 :