策略模式:把类中可能改变的方法用成员属性替换,属性是实现对应方法接口的类,本来直接调用类方法,修改后就是调用成员属性类的方法,这样可以在运行时给类设置不同的成员属性达到动态改变调用的方法;
使用:Model 类 持有 Query 类,通过调用Query 类的查找等方法实现Model 的数据查找,如果需要更换数据源可以在Model类实例时绑定其他数据源的Query 实现数据查找的替换(将继承变为组合)
单例模式:全局唯一,数据库连接类,配置文件类等
工厂模式:具有一系相同功能不同实现的类,需要通过不同参数生产不同的实例,如DbManager 通过不同参数获取不同类型的数据库连接 (mysql,sqlite,Sqlsever等)
Builder模式:对象的创建具有多种可选的组合,通过Builder 构造器提供构造类可选的方法,最后构造出需要的功能组合,如:StringBuilder 构造字符串,SqlBuilder 构造sql 语句;
观察者模式:数据变动或事件触发会主动回调设置的监听依赖,需要提前设置监听者, 如swoole协程结束设置回调函数,php设置类的自动加载,异常处理机制等都可以理解为观察者模式(虽不是完整的观察者模式,但核心是一样的);
装饰模式:附加职责,将父类作为属性持有,并调用父类实现父类原有方法,添加额外方法;如,封装RedisHelp 类,继承Redis类并持有Redis作为属性,调用Reids类实现原有方法,在后面添加自己需要的快捷操作方法
设计原则
一:找出程序中会变化的方面,然后将其和固定不变的方面相分离.
二:针对接口编程,不针对实现编程
三:多用组合,少用继承