# 为啥要学习设计模式? 苦恼一 : 在实际工作中, 阅读框架源码 或 第三方 demo 源码时, 因为类关系太复杂, 逻辑写的太🐂了, 看半天才一知半解。 苦恼二 : 必然
苦恼一 : 在实际工作中, 阅读框架源码 或 第三方 demo 源码时, 因为类关系太复杂, 逻辑写的太🐂了, 看半天才一知半解。
苦恼二 : 必然喷过别人的代码, 觉得写的很垃圾, 尤其是领导要让你改他的代码的时候, 都有删掉重写的想法, 估计别人看我的代码也是这样的想法~~🤦♂️
所以写出优雅的、快速稳定的代码是各位必须做到的
一个类只负责一项职责。
子类可扩展父类功能,但不能改变父类原有的功能。
高层模块不应该依赖低层模式,二者都应该依赖其抽象,抽象不应该依赖细节,细节应该依赖抽象。
客户端不应该依赖它不需要的接口,并尽力实现单一职责原则。例: 订单接口可分为下单接口、发货接口、发货接口等,而不能将订单相关的方法都定义到一个接口中。
又称为 最少知道法则,只与朋友通信,表示一个对象应该对其他对象表示最少的了解,也就是一个类除了提供公共的方法,不对外泄露任何信息。
一个软件实体,如类、模块和函数应该对扩展开放、对修改关闭。
单例模式确保某个类只有一个实例。
- 私有化静态变量
- 私有化构造方法
- 私有化克隆方法
- 私有化序列化方法
- 静态化方法
- final 类
PHPfinal class Singleton{ private static $instance; private function __construct() { } private function __clone() { } private function __wakeup() { } public static function getInstance(): Singleton { if (static::$instance === null) { static::$instance = new Singleton(); } return static::$instance; }}
用工厂类中的方法实例化对象,当调用对象中的方法时,直接通过工厂类中的静态方法来调用对象中的方法。
如果想要更改实例化的类名,则只需要修改类名与工厂方法中 new 的类名即可。
php interface people{public function say(); }class man implements people{ public function say() { echo 'man'; }}class woman implements people{ public function say() { echo 'woman'; }}class echoFactory{ static function man() { return new man(); } static function woman() { return new woman(); }}# 调用$man = echoFactory::man();$man -> say();
注册模式解决全局共享和交换对象,将已创建好的对象,挂在全局可以使用的数组上,在需要使用的时候,直接从该数组上获取该类的实现即可。
class ReGISter{ protected static $objects; function set($alias, $object) { self::$objects[$alias] = $object; } function get($name) { return self::$objects[$name]; } function _unset($alias) { unset(self::$objects[$alias]); }}
策略模式是对象的行为模式,动态的选择需要调用的类。
- 策略模式三个角色:
- 抽象策略角色
- 具体策略角色
- 环境角色
- 策略模式实现步骤:
- 定义抽象角色类
- 定义具体策略类
- 定义环境角色类
# 1. 定义抽象角色类abstract class baseClass{ abstract function printPage();}# 2. 定义具体策略类class 360Page extends baseClass{ function printPage() { echo '360'; }}class aliPage extends baseClass{ function printPage() { echo 'ali'; }}# 3. 定义环境角色类class echoClass{public function echo(baseClass $object) { return $object->printPage(); }}# 4. 实现$obj = new echoClass();$obj->echo( new 360Page() );
适配器模式就是将截然不同的函数接口封装成统一的api。PHP中例如 Mysql、mysqlI、PDO 可以封装成统一的API。比如还有 支付宝支付、微信支付等,七牛对象存储、阿里对象存储等,Redis、memcache 缓存函数等
当一个对象发生变化时,依赖他的对象全部会收到通知,并自动更新。
# EventGenerator.php<?phpabstract class EventGenerator{private $observers = array(); function addObserver(Observer $observer){$this->observers[]=$observer;}function notify(){foreach ($this->observers as $observer){$observer->update();}}}?># 定义一个观察者接口 Observer.php<?phpinterface Observer{function update();//这里就是在事件发生后要执行的逻辑}# 一个实现了 EventGenerator 抽象类的类,用于具体定义某个 发生的事件实现class Event extends EventGenerator{function triger(){echo "Event
";}}class Observer1 implements Observer{function update(){echo "逻辑 1
";}}class Observer2 implements Observer{function update(){echo "逻辑 2
";}}$event = new Event();$event->addObserver(new Observer1());$event->addObserver(new Observer2());$event->triger();$event->notify();
来源地址:https://blog.csdn.net/qq_35453862/article/details/126469777
--结束END--
本文标题: PHP - 设计模式
本文链接: https://www.lsjlt.com/news/421344.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0