php设计模式小结

php面向对象的封装,继承,多态,使得它拥有多种多样的设计模式,这些设计模式的最终目的是实现代码的解耦,php框架就是由于这些设计模式的引入而变得更加优雅。这里进行简单的总结。



1,设计模式记忆方法

单例模式,工厂模式,注册树模式,适配器模式,策略模式,观察者模式,映射模式,原型模式,装饰模式,迭代器模式,代理模式。

我的记忆方法是取模式类型的首个字连成一句话,单公主是侧观影原装迭代。当然你可以有自己的记忆方法,这个是很随机的, 可以调整字的顺序及谐音字,只要好记及可。别感觉这个没用,如果发展成长期记忆,就会顺手拈来,成为自己永远的知识点。下面进行逐一的解释。


2,单例模式

相比于其他的设计模式,单例模式没有用任何的interface,或abstract,只用到一个class,将构造方法私有化,然后内部函数创建自己并做出判断,用静态变量存储生成的对象,以便在整个php运行阶段进行使用,由于代码有点长,可以百度单例模式进行比对。


3,工厂模式

特点是创建一个类,用类里面的静态方法去创建其他类的对象,这样的好处是通过工厂模式创建的对象都是一个模式的,如果创建的对象的名称发生改动,只需要改变工厂模式中new对象时的名称即可,不用在所有代码全部发生改动


4,注册树模式

特点是通过自身的静态变量保存对象,在全局都可以使用。本身类包含三个方法,set,get,unset,new一个新对象后,通过set注册到这个类中,用的时候只要从这个类中获取即可,很多框架都有这个应用,如注册session,路由等


5,适配器模式

这里用到了interface,通过interface规定好connect方法,close方法,及他们所需要的参数。然后用mysql类,mysqli类及pdo类分别继承这个接口,在使用时,new mysql类对外的接口都是connect和close方法,且参数一致,如果项目需要改为mysqli,只需要将new mysql改为mysqli即可。


6,策略模式

应用场景是网站需要对男生女生产生不同的页面内容,如果是一般的代码设计,就是在首页的index方法中对get或者session中的数据进行if判断,这样耦合过于严重,这时需要有个interface规定好index中需要用到的方法,如showad();同时首页的class中创建一个传入strategy策略的方法,setstrategy,这个方法的参数是接口的实现对象,然后在首页index方法中调用方法,达到解耦目的。然后去创建两个继承接口的类,一个是male一个是femal,分别实现各自的方法,在new 首页类之后,通过判断,注册不同的male和female对象到首页类对象中,首页类对象没有任何判断只是调用了接口中的方法而已,所以这是解耦的


7,观察者模式

用到了事件发生者abstract,观察者interface,和事件发生类,和观察者类,事件发生者抽象类规定了必须有addObserver方法和notify方法,观察者interface规定了每个观察者必须有update方法,以供notify方法进行调用,事件发生类继承事件发生者抽象类,并且在事件发生后去调用抽象类的notify方法,通过遍历加入的观察者,分别执行他们的update方法。这样就达到了整个业务逻辑的解耦


8,映射模式

在框架中我们总是能够用new的model类当做对象$mode->id=1;这种方式进行增删改查,这就是通过映射模式做到的,通过构造函数和析构函数,执行sql语句,然后返回数据对象,并分别将他们对应的赋值映射到model类的对象中,通过修改后在析构函数中进行update操作,达到修改数据库的目的


9,原型模式

在大对象中通过new和初始化对象太占资源,可以在初始化之后,通过clone关键字,clone对象,在进行下面的操作,可以省去大部分的初始化的工作


10,装饰模式

在框架中经常可以看到beforeInsert(),afterUpdate()这种操作,就是在插入之前或者更新之后固定进行的操作,这就是通过装饰模式实现的。就是在classA中加入beforeInsert()方法,在insert方法中调用$this->beforeInsert()方法,这个方法会从自身的装饰器中foreach所有的装饰起,并调用所有继承了接口的装饰器的beforeInsert方法,进行相应的操作。


11,迭代器模式

这个就是让对象可以通过foreach遍历所有的内容,具体可以查看网上的教程,很多


12,代理模式

比如说数据库读写分离后,在读的时候需要用到从库,写的时候需要用到主库,这时通过interface约束好两个方法,一个是read方法,一个是write方法,proxy继承这个接口后,实现read方法时去链接从库,write时去连接主库,这样就能达到相应的目的。

这些总结主要是看过慕课网中的rango老师的大话设计结构后的一些笔记,提醒自己之用,rango老师的免费课程地址

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文章部分内容转载自:http://blog.csdn.net/zhangerqing 一、设计模式的分类 总体来说...
    j_cong阅读 6,215评论 0 20
  • 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者...
    RamboLI阅读 4,090评论 0 1
  • 创建型模式 工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设...
    liuyang7519阅读 2,622评论 0 2
  • 今天在安装依赖库的时候,提示升级pip,在dos下升级的时候出现UnicodeDecodeError: ‘asci...
    钓小鱼的猫阅读 4,525评论 0 0
  • 后来,我经常想起来一句话 “不以物喜,不以己悲”。 内心强大就是,我是水。 我有一万种样子, 我有一千个颜色。 我...
    一凡的但丁阅读 3,424评论 0 0