设计模式六大原则
- 单一职责:一个类,只需要做好一件事情
- 开放封闭:一个类,应该可以扩展的,而不可以修改的。
- 依赖倒置原则:一个类,不应该强依赖另外一个类。每个类对于另外一个类都是可替换的。
- 里氏替换原则:所有引用基类的地方必须能透明地使用其子类的对象。
- 接口隔离原则:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
-
1. 单例模式
单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例。
三私一公 私有的静态属性:保存类唯一实例的静态成员变量
- 私有的构造方法:防止在外部实例化,从而失去单例模式的意义
- 私有的克隆方法:禁止克隆
- 公共的静态方法:用来访问静态属性储存的对象,如果没有对象,则生成此单例 ```php <?php
class Singleton { private static $instance = null;
// 禁止被实例化 private function __construct() {
}
// 禁止clone private function __clone() {
}
// 实例化自己并保存到$instance中,已实例化则直接调用 public static function getInstance(): object { if (empty(self::$instance)) { self::$instance = new self(); } return self::$instance; } }
// 两次调用返回同一个实例 $single1 = Singleton::getInstance(); $single2 = Singleton::getInstance(); ``` 在外部实例化或可控都会报错。
2. 工厂模式
把创建对象的过程封装起来,提供方法有助于我们获取对象。
由于一个类可能会在很多地方被实例化。当类名或参数发生变化时,工厂模式可简单快捷的在工厂类下的方法中 一次性修改,避免了一个个的去修改实例化的对象。
3. 策略模式
4. 观察者模式
5. 适配器模式
使用不同的接口重构某个类,可以允许使用不同的调用方式进行调用。
使用场景:利用接口,将不同的类组装一组有相同名称的方法 ,利用接口把 PDO、mysql、mysqli 封装成相同都数据库操作;类似的场景还有 cache 适配器,可以将 memcache、redis、file等不同的缓存方法封装成统一的给外部调用。
使用方法:首先定义一个接口(有几个方法,以及相应的参数)。然后,有几种不同的情况,就写几个类实现该接口。将完成相似功能的函数,统一成一致的方法。
6. 注册模式
7. 原型模式
有时候,部分对象需要被初始化多次。而特别是在如果初始化需要耗费大量时间与资源的时候进行预初始化并且存储下这些对象,就会用到原型模式。
使用场景:初始化需要耗费大量资源和时间。
8. 装饰器模式