php 设计模式的学习与实用[一 Strategy ]

来源:互联网 发布:为什么淘宝三国杀元宝 编辑:程序博客网 时间:2024/06/04 18:42

先从读书开始,比较好入门的一本是 headfirst 讲得比较贴切易懂.
第一种模式 Strategy





相关特点:
一“针对接口编程”,关键就在多态。利用多态,程序可以针对超类型编程,执行时会根据
实际状况执行到真正的行为,不会被绑死在超类型(duck)的行为上.

这样的设计, 可以让飞行和呱呱叫的动作被其他的对象复用,因为这些行为已经与鸭子类无关了。而我们可以新增一些行为, 不会影响到既有的行为类,也不会影响“使用”到飞行行为的鸭子类
三  在运行时想改变鸭子的行为,只需调用鸭子的setter方法就可以
如果单独利用继续来实现,将会有以下问题.
A. 代码在多个子类中重复。
B. 运行时的行为不容易改变。
C. 我们不能让鸭子跳舞。
D. 很难知道所有鸭子的全部行为。
E. 鸭子不能同时又飞又叫。
F. 改变会牵一发动全身,造成其他鸭子不想.

以上为看了 headfirst 后的自我总结,刚开始写blog 很多东西都写得很生梳,才发现想表达出想法不是件容易的事,以后要多努力了。

 


下面我讲讲我自己在应用到strege 模式的一个相关的例子

一个表单元素.


 

上图红色框内的,我将之命名为表单元素.

在后台中通常在添加数据,修改数据,查询数据时,会使用表单元素。
而表单元素的展示形式是多种多样的 [单选,复选,下拉,输入框,隐藏域,文本域,swf上传,普通上传,日历控件,编辑器]
同时,在复选表单时,数据源也是多种多样的。[可以来自json 数据,xml数据,数据库查询,配置的数组]
同时,一个表单元素,还需要有相关的validate 来验证他的输入合法性。 基于篇符关系,我简单讲讲我是如何封装前者的。


关于显示的封装.

 

 


 

关于字段类的封装。


//测试使用

 

 


备注: 为了更关注表达strege模式,上述代码隐去了大量的实际的代码,而在实际过程中,使用也是在这两个接口的基础上不断的包装成了服务,我自已在实践中的感觉是这两个接口挺有用,挺好用的,在后台上的插入,修改,和查询上带来了大量的帮助。剩下的,就是一些体力活了