PHP设计模式
三种基础设计模式
注册模式: 注册类,可以用于全局调用
工厂模式:用于创建对象。好处:如果被调用的对象需要进行修改,那么使用工厂模式便只修改一个地方就好
单例模式:不重复new 对象
适配器模式
1、适配器模式,可以将截然不同的函数接口封装成统一的API
2、实际应用举例,php的数据库操作有mysql,mysqli,pdo3种可以用适配器模式统一成一致。类似的场景还有cache适配器,将memcache,redis,file,apc等不同的缓存函数统一成一致
3、注意的是,代码说的不够完全,还需要进行封装、改
策略模式
1、策略模式,将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,这种模式就是策略模式 2、实际应用举例,假如一个电商网站系统,针对男性女性用户要各自跳转到不同的商品类名,并且所有广告位展示不同的广告,传统的做法是加入if...else... 判断。 如果新增加一种用户类型,只需要新增加一种策略即可``
数据对象映射模式
1、数据对象映射模式,是将对象和数据存储起来,对一个对象的操作会映射为对数据存储的操作
2、在代码钟实现数据对象映射模式,我们将试下ORM类,将复杂的sql语句映射成对象属性的操作
3、结合是哟弄个数据对象映射模式,工厂模式,注册模式
4、访问对象属性的时候就修改当前记录对象的数据库记录
观察者模式
1、观察者模式(Observer),当一个对象状态发生改变时,以来它的对象会全部收到通知,并自动更新
2、场景:一个事件发生后,要执行一连串更新操作。传统的编程方式,就是在事件的代码之后直接加入处理逻辑。当更新的逻辑增多之后,代码会边得难以维护。这种方式是耦合的,侵入式的,增加新的逻辑需要修改事件主题的代码
3、观察者模式实现了低耦合,非侵入式的通知与更新机制
原型模式
1、与工厂模式作用类似,都是用来创建对象
2、与工厂模式的实现不同,原型模式是先创建好一个原型对象,然后通过clone原型对象来创建新的对象。这样就免去了类创建时重复的初始化操作
3、原型模式适用于大对象的创建,创建一个大对象需要很大的开销,如果每次new就会消耗很大,原型模式仅需内存拷贝即可
装饰器模式
1、装饰器模式(Decorator),可以动态地添加修改类的功能
2、一个类提供了一项功能,如果要在修改并添加额外的功能,传统的编程模式,需要写一个子类继承它,并重新实现类的方法
使用装饰器模式,仅需在运行时添加一个装饰器对象即可实现,可以实现最大的灵活性
迭代器模式
1、迭代器模式,在不需要了解内部实现的前提下,遍历一个聚合对象的内部元素
2、相比传统的编程模式,迭代器模式可以隐藏遍历元素所需的操作
3、 应用场景 遍历数据库表,拿到所有的user对象,然后用佛 foreach 循环,在循环的过程中修改某些字
4、如果一个对象是一个集合,比如数据结果集。 我们通常需要逐个取出每一个元素,如果想用foreach逐个取出的话,集合类需要继承迭代器接口,实现接口中的方法,才可以被foreach迭代。 迭代器模式其实就是可使用foreach模式
代理模式
1、 在客户端与实体之间建立一个代理对象(proxy),客户端对实体进行的操作全部委派给代理对象,隐藏实体的具体实现细节。
2、 Proxy还可以与业务代码分离,部署到另外的服务器,业务代码中通过RPC来委派任务。
3、示例:读写分离
面向对象编程的基本原则
1、单一职责:一个类,只需做好一件事请。
2、开放封闭:一个类,应该时可扩展的,而不可修改的。
3、依赖倒置:一个类,不应该强依赖另外一个类。每个类对于另外一个类都是可替换的。
4、配置化:尽可能地使用配置,而不是硬编码
5、面向接口编程:只需要关心接口,不需要关心实现。
配置与设计模式
1、PHP中使用ArrayAccess实现配置文件的加载
2、在工厂方法中读取配置,生成可配置化的对象
3、使用装饰器模式实现权限验证,模板渲染,JSON串化
4、使用观察者模式实现数据更新事件的一系列更新操作
5、使用代理模式实现数据库的主从自动切换