PHP设计模式之组合模式定义与应用示例
发布:smiling 来源: PHP粉丝网 添加日期:2022-02-09 12:01:57 浏览: 评论:0
这篇文章主要介绍了PHP设计模式之组合模式定义与应用,结合实例形式详细分析了PHP组合模式基本原理、定义与使用方法,需要的朋友可以参考下。
本文实例讲述了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 . " --------- \r\n ";
- 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 . " \r\n ";
- }
- }
- 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();
- }
- }
- // 实例一下
- // 人
- $item3 = new Item("baidu", "www.baidu.com");
- $item4 = new Item("google", "www.google.com");
- $item1 = new Item("163", "www.163.com");
- $item2 = new Item("sina", "www.sina.com");
- // 班级
- $subMenu1 = new Menu("sub menu1");
- $subMenu1->add($item1);
- $subMenu1->add($item2);
- $subMenu2 = new Menu("sub menu2");
- $subMenu2->add($item3);
- $subMenu2->add($item4);
- $subMenu3 = new Menu("sub menu3");
- $subMenu3->add($item3);
- $subMenu3->add($item4);
- // 所有班级
- $allMenu = new Menu("All Menu");
- $allMenu->add($subMenu1);
- $allMenu->add($subMenu2);
- $allMenu->add($subMenu3);
- // 打印所有班级
- $objClient = new Client($allMenu);
- $objClient->displayMenu();
- // 打印第2 班级
- $objClient->setMenu($subMenu2);
- $objClient->displayMenu();
- ?>
运行结果:
- -- All Menu ---------
- -- sub menu1 ---------
- 163#www.163.com
- sina#www.sina.com
- -- sub menu2 ---------
- baidu#www.baidu.com
- google#www.google.com
- -- sub menu3 ---------
- baidu#www.baidu.com
- google#www.google.com
- -- sub menu2 ---------
- baidu#www.baidu.com
- google#www.google.com
Tags: PHP组合模式
- 上一篇:php的instanceof和判断闭包Closure操作示例
- 下一篇:最后一页
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)