Skip to content

light0011/designPattern

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

designPattern

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,紧急程度分别为一般,紧急,特急。

如果不用桥接模式就是九个类来实现每种方式的组合。

使用桥接模式则是六种,并且分别进行组合。

About

php设计模式

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages