php设计模式
心得笔记
设计模式:在软件开发过程中,经常出现的典型场景的典型解决方案,称为设计模式。
设计模式常常是因为某种语言不能达到某种目的而设计产生,但是在php中,很多设计模式都被自然消除了,有些设计模式在实际开发过程中可能用的地方不太多,但是设计模式的思想却非常值得学习。
1、多态
在面向对象过程中,指某种对象实例的不同表现形态。
多态特点,在静态语言中体现的更为明显。
即在C等强类型语言中,函数传入参数必须指明类型,并且传入的参数如果类型不对,则程序无法运行。在php中,则可以不指明参数类型,弱类型语言可以体现。则也可以传入类型,比如int ,Array ,或者某个类名(传入的值必须为该类的实例),此时若传入参数不符合指定的类型,程序无法运行。
那么多态就是,例如01.php中描述,只要写一个父类,就可以传入各个子类的类型,各自子类又变现各异,因为每个子类都属于其父类,从而这样无论再传哪个子类的实例都不会报错了,进而实现多态。
php太灵活了,搞得多态的意义好像不是很大了呢。。。。
例子 01.php
2、简单工厂模式
php程序员可能体会不到调用端与客户端的作用,因为有什么方法直接打开就能看,不像java,打成一个包,然后调用其方法,看不到里面的方法。
例子 02.php
3、工厂模式
例子:可参照hfphp框架中Factory.class.php,已使用工厂模式,根据不同的GET值实例化不同的类
4、单例模式 连接接数据库,操作cookie,上传等场景中,保证该类的只实例化一个,即为单例模式
如果在外部实例化类,那必然会产生不同的对象,所以要在类的内部进行实例化
基本步骤:
1、封锁new 操作 2、内部new对象 3、getIns预先判断实例 4、加final,防止继承,再被实例化 5、还有防止克隆
具体情况根据场景不同有所改变。
04.php DB.class.php
5、观察者模式
PHP5中提供了观察者observer与被观察者subject的接口
观察者模式分为两个角色, 观察者(observer)和被观察者(observables), 先在被观察者注册一系列的被观察者, 在被观察者发生变化的时候,通知观察者,进而观察者自动进行更新,这种一对多的关系就像你是一个小贩(被观察者),卖东西,有很多人(观察者)在买你的东西,假如你要升价, 这个时候所有的消费者(观察者)可以决定继续买,还是不买,还是其他动作,作为小贩(被观察者)的你只需要把价格增加,继而通知一下,而不用去管其他人(观察者)的动作。
05.php
6、职责链模式
责任链模式,其目的是组织一个对象链处理一个如方法调用的请求。 当ConcreteHandler(具体的处理程序)不知道如何满足来自Client的请求时,或它的目的不是这个时,它会委派给链中的下一个Handler(处理程序)来处理。
这个设计模式通常和复合模式一起使用,其中有些叶子或容器对象默认委派操作给它们的父对象。另一个例子是,本地化通常是使用责任链处理的,当德语翻译适配器没有为翻译关键词找到合适的结果时,就返回到英语适配器或干脆直接显示关键词本身。
06.php
7、策略模式
策略模式与工厂模式相似,但是工厂模式传入参数是返回类的实例,而策略模式则是返回这个实例,并主要执行这个实例的结果。
看实例可领会其中的不同
07.php
8、装饰器模式
装饰模式: 顾名思义,装饰模式是一种对对象数据的多次过滤,就像装饰一样, 一层层的修饰, 获取满意的结果。 装饰模式共分为两个部分: 1: 装饰者: 在这个接口接口下面的类和方法用以对数据进行修饰(即对数据进行过滤修改) 2: 被装饰者: 这个就是要被过滤的数据接口对象
08.php
9、装配器模式
之前买过个ipad玩,当用其充电器充电时遇到了点麻烦(有的同学应该知道),家里没有适合它的插座。还好,卖家送了个接头转换部件,问题轻松解决。这就是适配器的作用。
09.php
10、桥接模式
举个例子,发生消息方式分为站内,sns,email,紧急程度分别为一般,紧急,特急。
如果不用桥接模式就是九个类来实现每种方式的组合。
使用桥接模式则是六种,并且分别进行组合。