DesignPatternsPHP

php实现设计模式

View on GitHub

结构型模式

这些设计模式关注类和对象的组合。 继承的概念被用来组合接口和定义组合对象获得新功能的方式。

适配器模式

作为两个不兼容的接口之间的桥梁。 它结合了两个独立接口的功能。

场景:书本与电子书的翻页方式。

桥接模式

桥接是用于把抽象化与实现化解耦,使得二者可以独立变化。 这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。

缺点:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

场景:图片和视频的存储服务,与实现存储的功能接口

组合模式

用于把一组相似的对象当作一个单一的对象。 组合模式依据树形结构来组合对象,用来表示部分以及整体层次。

场景:表单由多个表单元素组合而成。

过滤器模式

使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。 它结合多个标准来获得单一标准。

场景:用户分为男女,单身非单身,成年未成年;需要过滤集合中的成年单身女性用户。

装饰器模式

向一个现有的对象添加新的功能,同时又不改变其结构。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。

场景:买商品需要付邮费。

外观模式

隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。 这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用

场景:PC系统启动与关闭。

享元模式

减少创建对象的数量,以减少内存占用和提高性能。 尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象(工厂模式)。

场景:双色球生成红球和篮球。

代理模式

一个类代表另一个类的功能

场景:composer包,下载国内阿里云代理的镜像源中的软件包。

流式接口

通常通过使用方法级联来中继后续调用的指令上下文来实现。

场景:QueryBuilder的数据库查询语言生成功能。

数据映射器

数据映射器是一个数据访问层。 标是保持内存中的表示形式持久性数据存储区彼此之间以及数据映射器本身之间相互独立

场景:ORM/DAO

依赖注入

IoC(控制反转)的最常见的实现方式。 由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。 许多框架已经具有用于依赖注入的容器,这些容器可通过配置数组创建对象并将其注入到需要的位置。

场景:数据库连接依赖数据库配置信息。