设计模式
基础
PHP 相关
- final,修饰的类不能被继承,修饰的方法不能被重写和重载,不能修饰属性
- const,只能修饰属性,即为常量属性
抽象和接口的区别
类目 |
抽象 |
接口 |
方法实现 |
有具体的实现 |
只有方法的声明没有实现 |
使用方式 |
extends,子类只需要实现只被声明的方法 |
implements,子类要实现所有声明 |
构造器 |
可以有构造器 |
不能有 |
访问修饰 |
可以有访问修饰 |
不能有 |
单例模式需要注意的
- 用static保存一个唯一的实例,提供public的static方法调用
- 构造函数和析构函数必须声明为私有
- __clone防止被复制
基于编程方法论的设计模式,按照目的分为三大类:
- 创建型:单例模式(程序运行时多次用到且资源是独占的),简单工厂模式(工厂类只有一个)、工厂模式(一个工厂类对应一个产品类,需要知道工厂名)、抽象工厂模式(工厂类可以创建同族产品)、建造者模式(产品、抽象构造者、具体构造者、导演)。如果抽象工厂模式是汽车配件生产工厂,那么建造者模式就是汽车组装工厂,可以返回一辆完整的汽车。
- 结构型:代理模式(客户端与目标对象之间起到一个中介和保护作用)、桥接模式(m*n的实现类变成m+n+抽象桥接类)、装饰者模式(类似装饰器)、适配器模式(飞虎:增加一个适配器,在里面包含一个虎的对象,实现飞的接口)
- 行为型:观察者(一对多的依赖关系,降低目标与观察者之间的耦合)、策略(基于接口的不同的算法策略类,它们可相互替换,客户端通过策略名来选择)、职责链(将请求的发送者和请求的处理者解耦了)、迭代器(实现类里增加getIterator方法用来迭代内部数据)、模板(抽象类一次性实现算法的不变部分,并将可变的行为留给子类来实现)
- 抽象类和接口的区别:语法特性上,抽象类中可以定义属性、方法的实现,而接口中不能定义属性,方法也不能包含代码实现等等;抽象类是对成员变量和方法的抽象,是一种is-a(继承)关系,是为了解决代码复用问题。接口仅仅是对方法的抽象,是一种has-a(具有)关系,表示具有某一组行为特性,是为了解决解耦问题。