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、使用代理模式实现数据库的主从自动切换

posted @ 2018-08-23 00:01  Burning_Ice  阅读(954)  评论(0编辑  收藏  举报