当前位置:  编程技术>php
本页文章导读:
    ▪php设计模式之观察者模式      观察者模式:定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。观察者类:1.抽象主题角色:主题角色将所有对观察者对象的引.........
    ▪php设计模式之命令模式      命令模式:将一个请求封装为一个对象,从而你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销操作。命令类:1.命令角色:声明了一个给所有具体命令类的.........
    ▪js+jquery 无限极联动      今天工作需要 要写树形的联动,于是写了个可扩展的无限极联动下拉选项代码写的比较凌乱 先mark  有空再整理操蛋!公司连QQ都不能上 随便截个图!先贴数据库idcategory_name 分类名pid 父分.........

[1]php设计模式之观察者模式
    来源:    发布时间: 2013-11-07
观察者模式:定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。
观察者类:

1.抽象主题角色:主题角色将所有对观察者对象的引用保存在一个集合中,每个主题可以任意多个观察者。抽象主题提供了增加和删除观察者对象的接口。

2.抽象观察者角色:为所有的具体观察者定义一个接口,在观察的主题发生改变时更新自己

3.具体主题角色:存储相关状态到具体观察者对象,当具体主题的内部状态发生改变时,给所有登记过的观察者发出通知。具体主题角色通常用一个具体子类实现。

4.具体观察者角色:存储一个具体主题对象,存储相关状态,实现抽象观察者角色所要求的更新接口,以使得其自身状态和主题的状态保持一致

作用:

1. 观察者模式的耦合度较小

2.支持广播通信

 



<?php
//抽象主题
interface Subject{
public function attach($observer);
public function detach($observer);
public function notifyObservers();
}
//具体主题
class ConcreateSubject implements Subject{
private $_observers;
public function __construct(){
$this->_observers = array();
}

public function attach($observer){
return array_push($this->_observers,$observer);
}

public function detach($observer){
$index = array_search($observer,$this->_observers);
if($index === false || !array_key_exists($index,$this->_observers)){
return false;
}
unset($this->_observer[$index]);
return true;
}

public function notifyObservers(){
if(!is_array($this->_observers)){
return false;
}
foreach($this->_observers as $observer){
$observer->update();
}
return true;
}
}
    
[2]php设计模式之命令模式
    来源:    发布时间: 2013-11-07
命令模式:将一个请求封装为一个对象,从而你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销操作。
命令类:

1.命令角色:声明了一个给所有具体命令类的抽象接口。这是一个抽象角色。

2.具体命令角色:定义一个接受者和行为之间的弱耦合;实现execute方法,负责调用接受的相应操作。execute()方法通常叫做执行方法

3.客户角色:创建一个具体命令对象并确定其接受者。

4.请求者角色:负责调用命令对象执行请求,相关的方法叫做行动方法。

5.接受者角色:负责具体实施和执行一个请求。

作用:

1.抽象出待执行的动作以参数化对象。

2.在不同的时刻指定、排列和执行请求。

3.支持取消操作

4.支持修改日志

 


<?php
//命令接口
interface Command{
public function execute();
}
//具体命令
class ConcreteCommand implements Command{
private $_receiver;
public function __construct($receiver){
$this->_receiver = $receiver;
}
public function execute(){
$this->_receiver->action();
}
}

//接受者
class Receiver{
private $_name;
public function __construct($name){
$this->_name = $name;
}
//行动方法
public function action(){
echo $this->_name.'do action .<br/>';
}
}
//请求者
class Invoker{
private $_command;
public function __construct($command){
$this->_command = $command;
}
public function action(){
$this->_command->execute();
}
}

//客户端
class Client{
public static function main(){
$receiver = new Receiver('jaky
    
[3]js+jquery 无限极联动
    来源:    发布时间: 2013-11-07

今天工作需要 要写树形的联动,于是写了个可扩展的无限极联动下拉选项


代码写的比较凌乱 先mark  有空再整理



操蛋!


公司连QQ都不能上 随便截个图!


先贴数据库




idcategory_name 分类名pid 父分类idorders 排序



1
22223331
0
1


2
2222111
1
1


12
44444
11
0


5
2222
1
1


6
2222
1
1


11
333
2
0


13
555555
12
0



页面代码 用的SMARTY



<div id="select" >
<select name="category_1" id="category_1" onChange="change('category_1');">
<option>请选择分类</option>
<!-- {foreach from=$galleryCategory item=category} -->
<option value="{$category.id}">{$category.category_name}</option>
<!-- {/foreach} -->
</select>
</div>


$galleryCategory 去数据的PHP代码为



$sql = " select * from yl_gallery_category where pid = 0";
$galleryCategory = $db->query($sql);
$smarty->assign("galleryCategory",$galleryCategory);


  给辞职的同事的项目擦屁股  用的原生态代码 还是比较容易理解的


然后就是关键的 JS代码了function change(val) {



var str = val; //select的id
var num; //当前级数

var id; // 分类id
num = str.substr(9,10);
//alert(num);
var nownum = parseInt(num)+1; // 将字符串转换为数字
id = $("#"+str+"").val();
var r = /^[1-9]+[0-9]*]*$/; //正整数
if (!r.test(id)) {
//清空过时的选项
$("select").each(function(index){
if(index+1 > num) {
$(this).remove();
}
})

return false;
}
var url = 'gallery.php?act=category&pid='+id;
$.ajax({
type: "POST",
cache: false,
url: url,
datatype : 'json',
timeout : 3000,
success: function(result){
if ( result != 0) {
var html = "<select name=category_"+nownum+" id=category_"+nownum+" onChange=change('category_"+nownum+"'); >";
html += "<option>请选择分类 </option>";
var datas = eval(result);
$.each(datas, function(i,val){
html += "<option value='"+val.id+"' >"+val.category_name+"</option>";
});
html += "</select>";

//清空过时的选项
$("select").each(function(index){
if(index+1 > num) {
$(this).remove();
}
})

$("#select").append(html);
} else {

          //清空过时的选项
$("select").each(function(index){
if(index+1 > num) {
$(this).remove();
}
})

       }

},
error: false
});

}


AJAX 取数据的PHP代码 



$sql = " select * from yl_gallery_category where pid = " .$pid;
$res = $db->query($sql);
if (empty($res)) {
$res = 0;
}
echo json_encode($res);


 OK 大功告成!


 





 


    
最新技术文章:
 




特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3