服务器之家

服务器之家 > 正文

php设计模式 Composite (组合模式)

时间:2019-12-01 12:41     来源/作者:PHP教程网

代码如下:


<?php 
/** 
* 组合模式 

* 将对象组合成树形结构以表示"部分-整体"的层次结构,使得客户对单个对象和复合对象的使用具有一致性 
*/ 
abstract class MenuComponent 

public function add($component){} 
public function remove($component){} 
public function getName(){} 
public function getUrl(){} 
public function display(){} 

class Menu extends MenuComponent 

private $_items = array(); 
private $_name = null; 
public function __construct($name) 

$this->_name = $name; 

public function add($component) 

$this->_items[] = $component; 

public function remove($component) 

$key = array_search($component,$this->_items); 
if($key !== false) unset($this->_items[$key]); 

public function display() 

echo "-- ".$this->_name." ---------<br/>"; 
foreach($this->_items as $item) 

$item->display(); 



class Item extends MenuComponent 

private $_name = null; 
private $_url = null; 
public function __construct($name,$url) 

$this->_name = $name; 
$this->_url = $url; 

public function display() 

echo $this->_name."#".$this->_url."<br/>"; 


class Client 

private $_menu = null; 
public function __construct($menu) 

$this->_menu = $menu; 

public function setMenu($menu) 

$this->_menu = $menu; 

public function displayMenu() 

$this->_menu->display(); 


// 实例一下 
// 创建menu 
$subMenu1 = new Menu("sub menu1"); 
$subMenu2 = new Menu("sub menu2"); 
$subMenu3 = new Menu("sub menu3"); 
$item1 = new Item("163","www.163.com"); 
$item2 = new Item("sina","www.sina.com"); 
$subMenu1->add($item1); 
$subMenu1->add($item2); 
$item3 = new Item("baidu","www.baidu.com"); 
$item4 = new Item("google","www.google.com"); 
$subMenu2->add($item3); 
$subMenu2->add($item4); 
$allMenu = new Menu("All Menu"); 
$allMenu->add($subMenu1); 
$allMenu->add($subMenu2); 
$allMenu->add($subMenu3); 
$objClient = new Client($allMenu); 
$objClient->displayMenu(); 
$objClient->setMenu($subMenu2); 
$objClient->displayMenu(); 

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
配置IIS网站web服务器的安全策略配置解决方案
配置IIS网站web服务器的安全策略配置解决方案 2019-05-23
Nginx服务器究竟是怎么执行PHP项目
Nginx服务器究竟是怎么执行PHP项目 2019-05-24
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
返回顶部