Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
门心叼龙
itstack-demo-design
提交
aa9c0e6f
I
itstack-demo-design
项目概览
门心叼龙
/
itstack-demo-design
通知
4
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
I
itstack-demo-design
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
aa9c0e6f
编写于
6月 23, 2020
作者:
小傅哥
⛹
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
小傅哥 | 重学 Java 设计模式:实战迭代器模式「模拟公司组织架构树结构关系,深度迭代遍历人员信息输出场景」
上级
0694f734
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
275 addition
and
0 deletion
+275
-0
itstack-demo-design-15-00/pom.xml
itstack-demo-design-15-00/pom.xml
+15
-0
itstack-demo-design-15-00/src/main/java/org/itstack/demo/design/group/Employee.java
...src/main/java/org/itstack/demo/design/group/Employee.java
+47
-0
itstack-demo-design-15-00/src/main/java/org/itstack/demo/design/group/GroupStructure.java
...in/java/org/itstack/demo/design/group/GroupStructure.java
+103
-0
itstack-demo-design-15-00/src/main/java/org/itstack/demo/design/group/Link.java
...-00/src/main/java/org/itstack/demo/design/group/Link.java
+32
-0
itstack-demo-design-15-00/src/main/java/org/itstack/demo/design/lang/Collection.java
...rc/main/java/org/itstack/demo/design/lang/Collection.java
+15
-0
itstack-demo-design-15-00/src/main/java/org/itstack/demo/design/lang/Iterable.java
.../src/main/java/org/itstack/demo/design/lang/Iterable.java
+7
-0
itstack-demo-design-15-00/src/main/java/org/itstack/demo/design/lang/Iterator.java
.../src/main/java/org/itstack/demo/design/lang/Iterator.java
+9
-0
itstack-demo-design-15-00/src/test/java/org/itstack/demo/design/test/ApiTest.java
...0/src/test/java/org/itstack/demo/design/test/ApiTest.java
+46
-0
pom.xml
pom.xml
+1
-0
未找到文件。
itstack-demo-design-15-00/pom.xml
0 → 100644
浏览文件 @
aa9c0e6f
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
itstack-demo-design
</artifactId>
<groupId>
org.itstack
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
itstack-demo-design-15-00
</artifactId>
</project>
\ No newline at end of file
itstack-demo-design-15-00/src/main/java/org/itstack/demo/design/group/Employee.java
0 → 100755
浏览文件 @
aa9c0e6f
package
org.itstack.demo.design.group
;
/**
* 雇员
*/
public
class
Employee
{
private
String
uId
;
// ID
private
String
name
;
// 姓名
private
String
desc
;
// 备注
public
Employee
(
String
uId
,
String
name
)
{
this
.
uId
=
uId
;
this
.
name
=
name
;
}
public
Employee
(
String
uId
,
String
name
,
String
desc
)
{
this
.
uId
=
uId
;
this
.
name
=
name
;
this
.
desc
=
desc
;
}
public
String
getuId
()
{
return
uId
;
}
public
void
setuId
(
String
uId
)
{
this
.
uId
=
uId
;
}
public
String
getName
()
{
return
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
String
getDesc
()
{
return
desc
;
}
public
void
setDesc
(
String
desc
)
{
this
.
desc
=
desc
;
}
}
itstack-demo-design-15-00/src/main/java/org/itstack/demo/design/group/GroupStructure.java
0 → 100755
浏览文件 @
aa9c0e6f
package
org.itstack.demo.design.group
;
import
org.itstack.demo.design.lang.Collection
;
import
org.itstack.demo.design.lang.Iterator
;
import
java.util.HashMap
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
public
class
GroupStructure
implements
Collection
<
Employee
,
Link
>
{
private
String
groupId
;
// 组织ID,也是一个组织链的头部ID
private
String
groupName
;
// 组织名称
private
Map
<
String
,
Employee
>
employeeMap
=
new
ConcurrentHashMap
<
String
,
Employee
>();
// 雇员列表
private
Map
<
String
,
List
<
Link
>>
linkMap
=
new
ConcurrentHashMap
<
String
,
List
<
Link
>>();
// 组织架构关系;id->list
private
Map
<
String
,
String
>
invertedMap
=
new
ConcurrentHashMap
<
String
,
String
>();
// 反向关系链
public
GroupStructure
(
String
groupId
,
String
groupName
)
{
this
.
groupId
=
groupId
;
this
.
groupName
=
groupName
;
}
public
boolean
add
(
Employee
employee
)
{
return
null
!=
employeeMap
.
put
(
employee
.
getuId
(),
employee
);
}
public
boolean
remove
(
Employee
o
)
{
return
null
!=
employeeMap
.
remove
(
o
.
getuId
());
}
public
boolean
addLink
(
String
key
,
Link
link
)
{
invertedMap
.
put
(
link
.
getToId
(),
link
.
getFromId
());
if
(
linkMap
.
containsKey
(
key
))
{
return
linkMap
.
get
(
key
).
add
(
link
);
}
else
{
List
<
Link
>
links
=
new
LinkedList
<
Link
>();
links
.
add
(
link
);
linkMap
.
put
(
key
,
links
);
return
true
;
}
}
public
boolean
removeLink
(
String
key
)
{
return
null
!=
linkMap
.
remove
(
key
);
}
public
Iterator
<
Employee
>
iterator
()
{
return
new
Iterator
<
Employee
>()
{
HashMap
<
String
,
Integer
>
keyMap
=
new
HashMap
<
String
,
Integer
>();
int
totalIdx
=
0
;
private
String
fromId
=
groupId
;
// 雇员ID,From
private
String
toId
=
groupId
;
// 雇员ID,To
public
boolean
hasNext
()
{
return
totalIdx
<
employeeMap
.
size
();
}
public
Employee
next
()
{
List
<
Link
>
links
=
linkMap
.
get
(
toId
);
int
cursorIdx
=
getCursorIdx
(
toId
);
// 同级节点扫描
if
(
null
==
links
)
{
cursorIdx
=
getCursorIdx
(
fromId
);
links
=
linkMap
.
get
(
fromId
);
}
// 上级节点扫描
while
(
cursorIdx
>
links
.
size
()
-
1
)
{
fromId
=
invertedMap
.
get
(
fromId
);
cursorIdx
=
getCursorIdx
(
fromId
);
links
=
linkMap
.
get
(
fromId
);
}
// 获取节点
Link
link
=
links
.
get
(
cursorIdx
);
toId
=
link
.
getToId
();
fromId
=
link
.
getFromId
();
totalIdx
++;
// 返回结果
return
employeeMap
.
get
(
link
.
getToId
());
}
public
int
getCursorIdx
(
String
key
)
{
int
idx
=
0
;
if
(
keyMap
.
containsKey
(
key
))
{
idx
=
keyMap
.
get
(
key
);
keyMap
.
put
(
key
,
++
idx
);
}
else
{
keyMap
.
put
(
key
,
idx
);
}
return
idx
;
}
};
}
}
itstack-demo-design-15-00/src/main/java/org/itstack/demo/design/group/Link.java
0 → 100755
浏览文件 @
aa9c0e6f
package
org.itstack.demo.design.group
;
/**
* 树节点链路
*/
public
class
Link
{
private
String
fromId
;
// 雇员ID
private
String
toId
;
// 雇员ID
public
Link
(
String
fromId
,
String
toId
)
{
this
.
fromId
=
fromId
;
this
.
toId
=
toId
;
}
public
String
getFromId
()
{
return
fromId
;
}
public
void
setFromId
(
String
fromId
)
{
this
.
fromId
=
fromId
;
}
public
String
getToId
()
{
return
toId
;
}
public
void
setToId
(
String
toId
)
{
this
.
toId
=
toId
;
}
}
itstack-demo-design-15-00/src/main/java/org/itstack/demo/design/lang/Collection.java
0 → 100755
浏览文件 @
aa9c0e6f
package
org.itstack.demo.design.lang
;
public
interface
Collection
<
E
,
L
>
extends
Iterable
<
E
>
{
boolean
add
(
E
e
);
boolean
remove
(
E
e
);
boolean
addLink
(
String
key
,
L
l
);
boolean
removeLink
(
String
key
);
Iterator
<
E
>
iterator
();
}
itstack-demo-design-15-00/src/main/java/org/itstack/demo/design/lang/Iterable.java
0 → 100755
浏览文件 @
aa9c0e6f
package
org.itstack.demo.design.lang
;
public
interface
Iterable
<
E
>
{
Iterator
<
E
>
iterator
();
}
itstack-demo-design-15-00/src/main/java/org/itstack/demo/design/lang/Iterator.java
0 → 100755
浏览文件 @
aa9c0e6f
package
org.itstack.demo.design.lang
;
public
interface
Iterator
<
E
>
{
boolean
hasNext
();
E
next
();
}
itstack-demo-design-15-00/src/test/java/org/itstack/demo/design/test/ApiTest.java
0 → 100755
浏览文件 @
aa9c0e6f
package
org.itstack.demo.design.test
;
import
com.alibaba.fastjson.JSON
;
import
org.apache.commons.lang3.StringUtils
;
import
org.itstack.demo.design.group.Employee
;
import
org.itstack.demo.design.group.GroupStructure
;
import
org.itstack.demo.design.group.Link
;
import
org.itstack.demo.design.lang.Iterator
;
import
org.junit.Test
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
public
class
ApiTest
{
private
Logger
logger
=
LoggerFactory
.
getLogger
(
ApiTest
.
class
);
@Test
public
void
test_iterator
()
{
GroupStructure
groupStructure
=
new
GroupStructure
(
"1"
,
"小傅哥"
);
groupStructure
.
add
(
new
Employee
(
"2"
,
"花花"
,
"二级部门"
));
groupStructure
.
add
(
new
Employee
(
"3"
,
"豆包"
,
"二级部门"
));
groupStructure
.
add
(
new
Employee
(
"4"
,
"蹦蹦"
,
"三级部门"
));
groupStructure
.
add
(
new
Employee
(
"5"
,
"大烧"
,
"三级部门"
));
groupStructure
.
add
(
new
Employee
(
"6"
,
"虎哥"
,
"四级部门"
));
groupStructure
.
add
(
new
Employee
(
"7"
,
"玲姐"
,
"四级部门"
));
groupStructure
.
add
(
new
Employee
(
"8"
,
"秋雅"
,
"四级部门"
));
groupStructure
.
addLink
(
"1"
,
new
Link
(
"1"
,
"2"
));
groupStructure
.
addLink
(
"1"
,
new
Link
(
"1"
,
"3"
));
groupStructure
.
addLink
(
"2"
,
new
Link
(
"2"
,
"4"
));
groupStructure
.
addLink
(
"2"
,
new
Link
(
"2"
,
"5"
));
groupStructure
.
addLink
(
"5"
,
new
Link
(
"5"
,
"6"
));
groupStructure
.
addLink
(
"5"
,
new
Link
(
"5"
,
"7"
));
groupStructure
.
addLink
(
"5"
,
new
Link
(
"5"
,
"8"
));
Iterator
<
Employee
>
iterator
=
groupStructure
.
iterator
();
while
(
iterator
.
hasNext
())
{
Employee
employee
=
iterator
.
next
();
logger
.
info
(
"{},雇员 Id:{} Name:{}"
,
employee
.
getDesc
(),
employee
.
getuId
(),
employee
.
getName
());
}
}
}
pom.xml
浏览文件 @
aa9c0e6f
...
...
@@ -45,6 +45,7 @@
<module>
itstack-demo-design-14-00
</module>
<module>
itstack-demo-design-14-01
</module>
<module>
itstack-demo-design-14-02
</module>
<module>
itstack-demo-design-15-00
</module>
</modules>
<dependencies>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录