系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 网络编程 > PHP编程 > 详细页面

PHP设计模式之组合模式定义与应用示例

时间:2020-02-03来源:系统城作者:电脑系统城

本文实例讲述了PHP设计模式之组合模式定义与应用。分享给大家供大家参考,具体如下:


 
  1. <?php
  2. /**
  3. * 组合模式
  4. *
  5. * 将对象组合成树形结构以表示"部分-整体"的层次结构,使得客户对单个对象和复合对象的使用具有一致性
  6. */
  7. abstract class MenuComponent
  8. {
  9. public function add($component)
  10. {
  11. }
  12. public function remove($component)
  13. {
  14. }
  15. public function getName()
  16. {
  17. }
  18. public function getUrl()
  19. {
  20. }
  21. public function display()
  22. {
  23. }
  24. }
  25. class Menu extends MenuComponent
  26. {
  27. private $_items = array();
  28. private $_name = null;
  29. public function __construct($name)
  30. {
  31. $this->_name = $name;
  32. }
  33. public function add($component)
  34. {
  35. $this->_items[] = $component;
  36. }
  37. public function remove($component)
  38. {
  39. $key = array_search($component, $this->_items);
  40. if ($key !== false) unset($this->_items[$key]);
  41. }
  42. public function display()
  43. {
  44. echo "-- " . $this->_name . " --------- \r\n ";
  45. foreach ($this->_items as $item) {
  46. $item->display();
  47. }
  48. }
  49. }
  50. class Item extends MenuComponent
  51. {
  52. private $_name = null;
  53. private $_url = null;
  54. public function __construct($name, $url)
  55. {
  56. $this->_name = $name;
  57. $this->_url = $url;
  58. }
  59. public function display()
  60. {
  61. echo $this->_name . "#" . $this->_url . " \r\n ";
  62. }
  63. }
  64. class Client
  65. {
  66. private $_menu = null;
  67. public function __construct($menu)
  68. {
  69. $this->_menu = $menu;
  70. }
  71. public function setMenu($menu)
  72. {
  73. $this->_menu = $menu;
  74. }
  75. public function displayMenu()
  76. {
  77. $this->_menu->display();
  78. }
  79. }
  80. // 实例一下
  81. // 人
  82. $item3 = new Item("baidu", "www.baidu.com");
  83. $item4 = new Item("google", "www.google.com");
  84. $item1 = new Item("163", "www.163.com");
  85. $item2 = new Item("sina", "www.sina.com");
  86. // 班级
  87. $subMenu1 = new Menu("sub menu1");
  88. $subMenu1->add($item1);
  89. $subMenu1->add($item2);
  90. $subMenu2 = new Menu("sub menu2");
  91. $subMenu2->add($item3);
  92. $subMenu2->add($item4);
  93. $subMenu3 = new Menu("sub menu3");
  94. $subMenu3->add($item3);
  95. $subMenu3->add($item4);
  96. // 所有班级
  97. $allMenu = new Menu("All Menu");
  98. $allMenu->add($subMenu1);
  99. $allMenu->add($subMenu2);
  100. $allMenu->add($subMenu3);
  101. // 打印所有班级
  102. $objClient = new Client($allMenu);
  103. $objClient->displayMenu();
  104. // 打印第2 班级
  105. $objClient->setMenu($subMenu2);
  106. $objClient->displayMenu();
  107. ?>
  108.  

运行结果:

-- 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

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

分享到:

相关信息

  • Thinkphp框架+Layui实现图片/文件上传功能分析

    这篇文章主要介绍了Thinkphp框架+Layui实现图片/文件上传功能,结合实例形式详细分析了Thinkphp+Layui实现图片文件上传的具体步骤、原理与相关操作技巧...

    2020-02-07

  • Laravel框架自定义分页样式操作示例

    这篇文章主要介绍了Laravel框架自定义分页样式操作,结合实例形式详细分析了laravel框架自定义分页样式的具体操作步骤、实现方法及相关注意事项,需要的朋友可以参考下...

    2020-02-03

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载