Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wushizhenking
CS-Notes
提交
5f07dd90
C
CS-Notes
项目概览
wushizhenking
/
CS-Notes
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
CS-Notes
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5f07dd90
编写于
6月 04, 2018
作者:
C
CyC2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
auto commit
上级
ddd10c1a
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
129 addition
and
1 deletion
+129
-1
notes/设计模式.md
notes/设计模式.md
+129
-1
pics/3fb5b255-b791-45b6-8754-325c8741855a.png
pics/3fb5b255-b791-45b6-8754-325c8741855a.png
+0
-0
未找到文件。
notes/设计模式.md
浏览文件 @
5f07dd90
...
@@ -500,6 +500,10 @@ public class Client {
...
@@ -500,6 +500,10 @@ public class Client {
### 类图
### 类图
-
Aggregate 是聚合类,其中 createIterator() 方法可以产生一个 Iterator;
-
Iterator 主要定义了 hasNext() 和 next() 方法。
-
Client 组合了 Aggregate,为了迭代遍历 Aggregate,也需要组合 Iterator。
<div
align=
"center"
>
<img
src=
"../pics//b0f61ac2-a4b6-4042-9cf0-ccf4238c1ff7.png"
/>
</div><br>
<div
align=
"center"
>
<img
src=
"../pics//b0f61ac2-a4b6-4042-9cf0-ccf4238c1ff7.png"
/>
</div><br>
### 实现
### 实现
...
@@ -794,7 +798,131 @@ public class Client {
...
@@ -794,7 +798,131 @@ public class Client {
### 意图
### 意图
将对象组合成树形结构来表示整体-部分层次关系,允许用户以相同的方式处理单独对象和组合对象。
将对象组合成树形结构来表示“整体/部分”层次关系,允许用户以相同的方式处理单独对象和组合对象。
### 类图
组件(Component)类是组合类(Composite)和叶子类(Leaf)的父类,可以把组合类看成是树的中间节点。
组合对象拥有一个或者多个组件对象,因此组合对象的操作可以委托给组件对象去处理,而组件对象可以是另一个组合对象或者叶子对象。
<div
align=
"center"
>
<img
src=
"../pics//3fb5b255-b791-45b6-8754-325c8741855a.png"
/>
</div><br>
### 实现
```
java
public
abstract
class
Component
{
protected
String
name
;
public
Component
(
String
name
)
{
this
.
name
=
name
;
}
public
void
print
()
{
print
(
0
);
}
abstract
void
print
(
int
level
);
abstract
public
void
add
(
Component
component
);
abstract
public
void
remove
(
Component
component
);
}
```
```
java
import
java.util.ArrayList
;
import
java.util.List
;
public
class
Composite
extends
Component
{
private
List
<
Component
>
child
;
public
Composite
(
String
name
)
{
super
(
name
);
child
=
new
ArrayList
<>();
}
@Override
void
print
(
int
level
)
{
for
(
int
i
=
0
;
i
<
level
;
i
++)
{
System
.
out
.
print
(
"--"
);
}
System
.
out
.
println
(
"Composite:"
+
name
);
for
(
Component
component
:
child
)
{
component
.
print
(
level
+
1
);
}
}
@Override
public
void
add
(
Component
component
)
{
child
.
add
(
component
);
}
@Override
public
void
remove
(
Component
component
)
{
child
.
remove
(
component
);
}
}
```
```
java
public
class
Leaf
extends
Component
{
public
Leaf
(
String
name
)
{
super
(
name
);
}
@Override
void
print
(
int
level
)
{
for
(
int
i
=
0
;
i
<
level
;
i
++)
{
System
.
out
.
print
(
"--"
);
}
System
.
out
.
println
(
"left:"
+
name
);
}
@Override
public
void
add
(
Component
component
)
{
throw
new
UnsupportedOperationException
();
// 牺牲透明性换取单一职责原则,这样就不用考虑是叶子节点还是组合节点
}
@Override
public
void
remove
(
Component
component
)
{
throw
new
UnsupportedOperationException
();
}
}
```
```
java
public
class
Client
{
public
static
void
main
(
String
[]
args
)
{
Composite
root
=
new
Composite
(
"root"
);
Component
node1
=
new
Leaf
(
"1"
);
Component
node2
=
new
Composite
(
"2"
);
Component
node3
=
new
Leaf
(
"3"
);
root
.
add
(
node1
);
root
.
add
(
node2
);
root
.
add
(
node3
);
Component
node21
=
new
Leaf
(
"21"
);
Component
node22
=
new
Composite
(
"22"
);
node2
.
add
(
node21
);
node2
.
add
(
node22
);
Component
node221
=
new
Leaf
(
"221"
);
node22
.
add
(
node221
);
root
.
print
();
}
}
```
```
html
Composite:root
--left:1
--Composite:2
----left:21
----Composite:22
------left:221
--left:3
```
### JDK
### JDK
...
...
pics/3fb5b255-b791-45b6-8754-325c8741855a.png
0 → 100644
浏览文件 @
5f07dd90
22.0 KB
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录