博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[php]php设计模式 Composite (组合模式)
阅读量:6947 次
发布时间:2019-06-27

本文共 2325 字,大约阅读时间需要 7 分钟。

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

转载地址:http://sihnl.baihongyu.com/

你可能感兴趣的文章
WIN8系统安装软件时提示"扩展属性不一致"的解决方法
查看>>
sqlite3.exe 使用
查看>>
微软职位内部推荐-Senior Software Engineer
查看>>
CAD中批量打印
查看>>
蛋疼的Apple IOS Push通知协议
查看>>
MyEclipse10.0 安装 jbpm4.4
查看>>
批处理复制文件(文件夹)排除某目录,某些类型(草稿)
查看>>
【转】shell 编程:冒号 后面跟 等号,加号,减号,问号的意义
查看>>
C#编写COM组件
查看>>
C#属性(Attribute)用法实例解析
查看>>
Android 自定义控件 优雅实现元素间的分割线 (支持3.0以下)
查看>>
Java中间件:淘宝网系统高性能利器
查看>>
ng-bind-html 的使用
查看>>
[OpenSource]浅谈.Net和Java互相调用的三种方式
查看>>
C语言指针的初始化和赋值
查看>>
安卓开发笔记——关于照片墙的实现(完美缓存策略LruCache+DiskLruCache)
查看>>
定义和使用EL函数
查看>>
LoadRunner项目结合抓包工具
查看>>
MySQL show binglog event in 'log_name'
查看>>
开发自己的博客转发插件(跨域)
查看>>