![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
OneGoal
这个作者很懒,什么都没留下…
展开
-
访问者模式
<?php// 访问者设计模式是一种将算法与操作对象的结构分离的方法。// 这种分离的实际结果是能够在不修改那些对象结构的情况下向现有对象结构添加新操作。// 这是遵循开放/封闭原则的一种方法。// Visiteeinterface Animal{ public function accept(AnimalOperation $operation);}// Vi...原创 2019-10-20 19:41:00 · 206 阅读 · 0 评论 -
模板方法模式
<?php// 用于定义操作中算法的程序框架,从而将某些步骤推迟到子类中。// 它允许重新定义算法的某些步骤,而不得更改算法的结构。abstract class Builder{ // Template method final public function build() { $this->test(); $thi...翻译 2019-10-20 19:11:21 · 138 阅读 · 0 评论 -
状态模式
<?phpinterface WritingState{ public function write(string $words);}class UpperCase implements WritingState{ public function write(string $words) { echo strtoupper($words);...翻译 2019-10-20 19:01:09 · 170 阅读 · 0 评论 -
规格模式
<?php// 每个规范类中都有一个称为 isSatisfiedBy 的方法,// 方法判断给定的规则是否满足规范从而返回 true 或 false。declare(strict_types=1);class Item{ private $price; public function __construct(float $price) { ...翻译 2019-10-20 18:56:57 · 219 阅读 · 0 评论 -
空对象模式
<?php// 返回一个对象或 null 应该用返回对象或者 NullObject 代替。// NullObject 简化了死板的代码,消除了客户端代码中的条件检查,// 例如 if (!is_null($obj)) { $obj->callSomething(); }// 只需 $obj->callSomething(); 就行。declare(strict_ty...翻译 2019-10-20 18:01:21 · 190 阅读 · 0 评论 -
备忘录模式
<?phpdeclare(strict_types=1);// 记忆模式是关于捕获和存储对象的当前状态的方式,以便以后可以平滑地恢复它。/** * Class EditorMemento */class EditorMemento{ /** * @var string */ protected $content; /** ...翻译 2019-10-20 17:47:39 · 325 阅读 · 0 评论 -
中介者模式
<?phpdeclare(strict_types=1);// 同类型的对象通过中介互动。interface ChatRoomMediator{ public function showMessage(User $user, string $message);}// Mediatorclass ChatRoom implements ChatRoomMediato...翻译 2019-10-20 17:34:41 · 171 阅读 · 0 评论 -
迭代器模式
<?phpdeclare(strict_types=1);namespace DesignPatterns\Behavioral\Iterator;/** * Class Book * * @package DesignPatterns\Behavioral\Iterator */class Book{ /** * @var string *...翻译 2019-10-20 17:25:14 · 126 阅读 · 0 评论 -
命令模式
<?php// 解耦了命令人和执行人// Receiverclass Bulb{ public function turnOn() { echo "Bulb has been lit"; } public function turnOff() { echo "Darkness!"; }}int...翻译 2019-10-20 17:18:44 · 176 阅读 · 0 评论 -
责任链模式
<?phpabstract class Account{ protected $successor; protected $balance; public function setNext(Account $account) { $this->successor = $account; } public funct...翻译 2019-10-20 16:54:11 · 180 阅读 · 0 评论 -
池模式
<?phpdeclare(strict_types=1);class WorkerPool implements \Countable{ /** * @var StringReverseWorker[] */ private $occupiedWorkers = []; /** * @var StringReverseWorke...翻译 2019-10-20 15:57:38 · 209 阅读 · 0 评论 -
多例模式
<?phpdeclare(strict_types=1);final class Multiton{ const INSTANCE_1 = '1'; const INSTANCE_2 = '2'; /** * @var Multiton[] */ private static $instances = []; /** ...翻译 2019-10-20 15:25:50 · 228 阅读 · 0 评论 -
建造者模式
<?php// 当一个对象可能有几种情况,避免构造函数伸缩时使用。// 与工厂模式的主要区别在于: 当创建是一个一步过程时,将使用工厂模式,// 而在创建是一个多步过程时,将使用构建器模式。/** * Class Burger */class Burger{ /** * @var int */ protected $size; ...翻译 2019-10-20 15:20:08 · 332 阅读 · 0 评论 -
各种工厂模式
<?phpdeclare(strict_types=1);// 抽象工厂、抽象工厂、抽象工厂、抽象工厂、抽象工厂、抽象工厂、抽象工厂、// 抽象工厂、抽象工厂、抽象工厂、抽象工厂、抽象工厂、抽象工厂、抽象工厂、// 抽象工厂、抽象工厂、抽象工厂、抽象工厂、抽象工厂、抽象工厂、抽象工厂、interface Product{ public function calcula...原创 2019-10-20 12:26:24 · 149 阅读 · 0 评论 -
注册模式
<?phpdeclare(strict_types=1);namespace DesignPatterns\Structural\Registry;abstract class Registry{ const LOGGER = 'logger'; /** * this introduces global state in your applicatio...翻译 2019-10-20 10:11:51 · 172 阅读 · 0 评论 -
代理模式
<?phpdeclare(strict_types=1);/** * Interface Door */interface Door{ /** * @return mixed */ public function open(); /** * @return mixed */ public function...翻译 2019-10-20 10:00:32 · 138 阅读 · 0 评论 -
享元模式
<?phpdeclare(strict_types=1);// 有点像单例模式,节省内存资源,CPU 资源。class KarakTea{}// Acts as a factory and saves the teaclass TeaMaker{ protected $availableTea = []; public function make($p...翻译 2019-10-20 09:34:50 · 149 阅读 · 0 评论 -
流接口模式
<?phpdeclare(strict_types=1);// 写的代码就像是人类的母语一样// 典型例子:Query Builder,PHPUnit/** * Class Sql */class Sql{ /** * @var array */ private $fields = []; /** * @var ar...翻译 2019-10-20 07:35:50 · 344 阅读 · 0 评论 -
门面模式
<?phpdeclare(strict_types=1);// facade 就是使用一个简单的接口去执行很多复杂的方法。/** * Class Computer */class Computer{ /** * */ public function getElectricShock() { echo "Ouch!"...翻译 2019-10-20 07:22:32 · 128 阅读 · 0 评论 -
依赖注入模式
<?phpdeclare(strict_types=1);namespace DesignPatterns\Structural\DependencyInjection;class DatabaseConfiguration{ /** * @var string */ private $host; /** * @var in...翻译 2019-10-20 07:10:30 · 188 阅读 · 0 评论 -
装饰模式
<?php// 一看就懂,不解释interface Coffee{ public function getCost(); public function getDescription();}class SimpleCoffee implements Coffee{ public function getCost() { ret...翻译 2019-10-20 07:04:29 · 145 阅读 · 0 评论 -
数据映射模式
<?php// 就是 ORM。在数据对象层和业务层中间加上映射层。//// CREATE TABLE `user` (// `id` int(11) NOT NULL AUTO_INCREMENT,// `name` varchar(32) CHARACTER SET utf8 DEFAULT NULL,// `mobile` varchar(11) CHARACTER...原创 2019-10-20 06:49:09 · 181 阅读 · 0 评论 -
桥模式
<?php declare(strict_types=1);namespace DesignPatterns\Structural\Bridge;// 多个 Formatters 抽象出 Formatter 接口// 多个 Services 抽象出 Service 接口// 两个接口之间有座桥,将两个接口的所有实例可以任意互联。/** * Interface Formatte...原创 2019-10-19 12:34:35 · 149 阅读 · 0 评论 -
EAV 实体属性值模式(多用于数据库)
<?php/** * Class Entity */class Entity{ /** * @var */ protected $name; /** * @var array */ protected $attribute = []; /** * Entity constructor. ...原创 2019-10-18 21:17:42 · 2102 阅读 · 0 评论 -
适配器或包装器模式
解决两个接口不兼容的问题。<?php declare(strict_types=1);namespace DesignPatterns\Structural\Adapter;interface Book{ public function turnPage(); public function open(); public function getPag...翻译 2019-10-18 20:19:53 · 170 阅读 · 0 评论 -
资源库模式
<?php/** * _ooOoo_ * o8888888o * 88" . "88 * (| -_- |) * O\ = /O * ____/`---'\____...原创 2019-10-18 15:38:52 · 255 阅读 · 0 评论 -
服务定位器模式
<?php declare(strict_types=1);namespace DesignPatterns\More\ServiceLocator;use DesignPatterns\More\ServiceLocator\Tests\ServiceLocatorTest;/** * 为应用程序中服务的创建和初始化提供一个中心位置。 * 解决的问题,如:可能存在多个地方需...原创 2019-10-18 14:04:04 · 181 阅读 · 0 评论 -
观察者模式
# 以观察者模式存在,当某个特定事件发生,观察者将会触发某个事件。# PHP 已经有 SplObserver 和 SplSubject 两个接口帮助你去实现此模式。<?phpnamespace DesignPatterns\Behavioral\Observer;/** * User implements the observed object (called Subject), it mai翻译 2017-10-28 10:51:35 · 339 阅读 · 0 评论 -
组合模式
<?php// 使用类型:// 1. 你想表示对象的部分-整体层次结构。// 2. 你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。// 通俗的讲:一个单一的实体和一个组合的实体,需要使用同样的方式去实现,这时候就需要想到用组合模式。abstract class WorkUnit{ protected $tasks = []; protecte翻译 2017-09-18 22:07:33 · 694 阅读 · 0 评论 -
单例模式
// 设计思想:只能创建一个单一的实例,类似于数据库链接对象,整个应用的配置对象。class Config{ static private $_instance = NULL; private $_setting = []; private function __construct() // 设计为私有,可以防止用户多次实例化。 { } priv翻译 2017-09-17 21:30:15 · 347 阅读 · 0 评论 -
策略模式
<?php// 策略模式适用于使用不同策略达到同一个目的。// 例如去学校,可以开车,可以坐车// 例如过滤字符串,可以是去掉特殊字符,可以是过滤脏话interface iToSchool{ public function way(); // 这儿规定了策略的作用。这边指的是怎么去学校。way 方式}class Bike implements iToSchool{原创 2017-09-24 21:59:06 · 613 阅读 · 0 评论