php设计模式

工厂模式:通过类里面的静态方法直接生成实例对象的方法,可以生成不同的实例对象;

 

单例模式:

      1、构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化;

      2、拥有一个保存类的实例的静态成员变量

      3、拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化)

    (简单说一个对象只负责一个特定的任务);

 

注册树模式:通过单一的全局的对象来获取对其他的对象实例的引用;(用一个对象的属性,一般是数组,键值对的形式,来保存其他的实例对象,方便全局的使用);

 

适配器模式:可以将截然不同的函数接口封装成统一的api,(php的数据库操作有mysql,mysqli,pdo可以用适配器模式统一成一致),(memcache,file,apc,redis是同样的效果);

     1.将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原来由于接口不兼容而不能一起工作的那此类可以一起工作;

     2.实现方法是设定一个统一的接口,规定相应的方法,再调用接口实现相应的方法,最后调用哪个就直接声明哪个对象即可;

 

策略者模式:分支逻辑的处理,还有解耦

 定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户

   封装:把行为用接口封装起来,我们可以把那些经常变化的部分,从当前的类中单独取出来,用接口进行单独的封装。
 
   互相替换:我们封装好了接口,通过指定不同的接口实现类进行算法的变化。(duck类,有的duck会飞,有的不会,可以把fly这个独立的方法用接口的形式独立开来,最后需要使用的时候就直接调用)
 
    1.找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起;
    2.针对接口编程,不针对实现编程;
    3.多用组合,少用继承;
 
 
数据对象映射模式:是将对象和数据存储映射起来,对一个对象的操作会存储映射为对数据存储的操作,这里主要是对数据的操作,改变数据库表的数据,游戏接口测试经常用到;
 
 
观察者模式:定义对象的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新,经典的案例有的是天气预报平台,订阅也是一样的效果;
 
 
原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象; 

     Prototype模式优点:
     1、可以在运行时刻增加和删除产品
     2、可以改变值以指定新对象
     3、可以改变结构以指定新对象
     4、减少子类的构造
     5、用类动态配置应用

     Prototype模式的缺点:
     Prototype模式的最主要缺点就是每一个类必须配备一个克隆方法。
     而且这个克隆方法需要对类的功能进行通盘考虑,这对全新的类来说不是很难,但对已有的类进行改造时,不一定是件容易的事。

   【原型模式适用场景】
   1、当一个系统应该独立于它的产品创建、构成和表示时,要使用Prototype模式
   2、当要实例化的类是在运行时刻指定时,例如动态加载
   3、为了避免创建一个与产品类层次平等的工厂类层次时;
   4、当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些

 

装饰器模式:可以动态的添加修改类的功能,一个类只有一个功能,装饰器模式可以动态的添加功能,增加了灵活性

 

迭代器模式:提供一个方法顺序访问一聚合对象中的各个元素,而又不暴露对象的内部表示

 

代理模式:代理模式是对象的结构模式,代理模式给某一个对象提供一个代理对象,并由此代理对象控制对原代理对象的引用。代理模式不应该让用户感觉到代理的存在,所以代理对象和原对象的对外的调用接口是一致的。

 

转载于:https://www.cnblogs.com/jakentec/p/4413782.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值