没有合适的资源?快使用搜索试试~ 我知道了~
思考题 1
资源详情
资源评论
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/86367887/bg1.jpg)
思 考 题 :
DESIGN PATTERN( 1)
寻 找 一 个 需 要 访 问 集 合 变 量 的 简 单 场 景 :
编 程 实 现 : ITERATOR PATTERN AND PROXY PATTERN
假想一个场景,需要通过迭代器来访问元素的后继(Binary Tree)
BinaryTree 类实现基本的二叉树的插入查找等功能:
01
public class BinaryTree {
02
public Node head;
03
04
public Node findMinNode(Node node) {
05 Node temp = node;
06
if (temp == null) {
07
return null;
08
}
09
while (temp.getLeftNode() != null) {
10 temp = temp.getLeftNode();
11
}
12
return temp;
13
}
14
15 public Node findMaxNode(Node node) {
16
Node temp = node;
17
if (temp == null) {
18
return null;
19
}
20 while (temp.getRightNode() != null) {
21
temp = temp.getRightNode();
22
}
23
return temp;
24
}
25
26
public Node searchNode(int x) {
27
Node node = head;
![](https://csdnimg.cn/release/download_crawler_static/86367887/bg2.jpg)
28
Node node1 = head;
29
if (head == null)
30 return null;
31
while (node1 != null) {
32
node = node1;
33
if (node.getElement() == x) {
34
return node;
35 } else if (node.getElement() > x) {
36
node1 = node.getLeftNode();
37
} else {
38
node1 = node.getRightNode();
39
}
40 }
41
return null;
42
}
43
44
public Node successor(Node x) {
45 if ((x == null) || (searchNode(x.getElement()) == null)) {
46
return null;
47
}
48
if (x.getRightNode() != null) {
49
return findMinNode(x.getRightNode());
50 }
51
Node y = x.getFather();
52
while ((y != null) && (x == y.getRightNode())) {
53
x = y;
54
y = y.getFather();
55 }
56
return y;
57
}
58
59
public void insert(int element) {
60 Node temp = head;
61
Node temp1 = head;
62
while (temp1 != null) {
63
temp = temp1;
64
if (temp.getElement() == element) {
65 return;
66
} else if (temp.getElement() > element) {
![](https://csdnimg.cn/release/download_crawler_static/86367887/bg3.jpg)
67
temp1 = temp.getLeftNode();
68
} else {
69
temp1 = temp.getRightNode();
70 }
71
}
72
if (temp == null) {
73
head = new Node();
74
head.setElement(element);
75 head.setFather(null);
76
} else {
77
Node node = new Node();
78
node.setElement(element);
79
node.setFather(temp);
80 if (temp.getElement() > element) {
81
temp.setLeftNode(node);
82
} else {
83
temp.setRightNode(node);
84
}
85 }
86
};
87
}
Node 节点类是基本元素
01
public class Node {
02
private Node father;
03
private Node leftNode;
04
private Node rightNode;
05 private int element;
06
07
public Node getFather() {
08
return father;
09
}
10
11
public void setFather(Node father) {
12
this.father = father;
13
}
14
15 public Node getLeftNode() {
![](https://csdnimg.cn/release/download_crawler_static/86367887/bg4.jpg)
16
return leftNode;
17
}
18
19
public void setLeftNode(Node leftNode) {
20 this.leftNode = leftNode;
21
}
22
23
public Node getRightNode() {
24
return rightNode;
25 }
26
27
public void setRightNode(Node rightNode) {
28
this.rightNode = rightNode;
29
}
30
31
public int getElement() {
32
return element;
33
}
34
35 public void setElement(int element) {
36
this.element = element;
37
}
38
39
}
下面是迭代器,主要实现基本的访问功能
01
public class BinaryTreeIterator {
02
Object index;
03
BinaryTree bt;
04
05 public BinaryTreeIterator(BinaryTree bt) {
06
this.bt = bt;
07
index = bt.findMinNode(bt.head);
08
}
09
10 public Object first() {
11
return bt.head;
12
}
![](https://csdnimg.cn/release/download_crawler_static/86367887/bg5.jpg)
13
14
public void next() {
15 index = bt.successor((Node) index);
16
}
17
18
public boolean isDone() {
19
return index == null;
20 }
21
22
public Object currentItem() {
23
return index;
24
}
25 }
代理模式,封装一部分操作
01
public class BinaryTreeProxy {
02
private BinaryTree bt;
03
04
public BinaryTreeProxy(BinaryTree bt) {
05 this.bt = bt;
06
}
07
08
public void insert(int element) {
09
bt.insert(element);
10 }
11
12
public Node searchNode(int x) {
13
return bt.searchNode(x);
14
}
15
16
public Node findMaxNode(Node node) {
17
if (node == null) {
18
return null;
19
}
20 if (searchNode(node.getElement()) == null) {
21
return null;
22
}
23
return bt.findMaxNode(node);
剩余29页未读,继续阅读
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![avatar](https://profile-avatar.csdnimg.cn/5396d60dd2f94b50805bfaae55aa50e9_weixin_35779047.jpg!1)
三山卡夫卡
- 粉丝: 18
- 资源: 323
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)
评论0