我是靠谱客的博主 悲凉西装,这篇文章主要介绍设计模式----装饰者模式与代理模式,现在分享给大家,希望可以做个参考。

1.代理模式

为主要的功能增加旁支末节的功能

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
public interface OperDb { void insert(); void query(); void delete(); void update(); } class OperDbImpl implements OperDb{ @Override public void insert() { System.out.println("-----insert-------"); } @Override public void query() { System.out.println("-----query-------"); } @Override public void delete() { System.out.println("-----delete-------"); } @Override public void update() { System.out.println("-----update-------"); } } class OperDbProxyForLog implements OperDb{ private OperDb operDb; public OperDbProxyForLog(OperDb operDb){ this.operDb = operDb; } @Override public void insert() { System.out.println("-----insert log-------"); operDb.insert(); } @Override public void query() { System.out.println("-----query log-------"); operDb.insert(); } @Override public void delete() { System.out.println("-----delete log-------"); operDb.insert(); } @Override public void update() { System.out.println("-----update log-------"); operDb.insert(); } public static void main(String[] args) { OperDb operDb = new OperDbProxyForLog(new OperDbImpl()); operDb.insert(); operDb.delete(); } }
2.装饰者模式

为主要的功能增加主要功能

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import java.math.BigDecimal; public abstract class Drink { String desc = "unknow drink"; public String getDesc() { return desc; } public abstract BigDecimal cast(); } class Coffee extends Drink{ Coffee(){ desc = "coffee"; } @Override public BigDecimal cast() { return new BigDecimal("3.00"); } } abstract class Seasoning extends Drink{ public abstract String getDesc(); } class Sugar extends Seasoning{ private Drink drink; Sugar(Drink drink){ this.drink = drink; } @Override public BigDecimal cast() { return drink.cast().add(new BigDecimal("0.23")); } @Override public String getDesc() { return drink.getDesc()+ ".sugar"; } public static void main(String[] args) { Drink drink = new Sugar(new Coffee()); System.out.println(drink.cast()); System.out.println(drink.getDesc()); } }
二者的差别:

1)相同点:都是为功能做拓展,都能保证原始类不做修改的前提下做功能拓展。(满足设计模式的开闭原则)
2)不同点:代理模式增加的是不重要的功能,装饰者模式增加的是主要功能

最后

以上就是悲凉西装最近收集整理的关于设计模式----装饰者模式与代理模式的全部内容,更多相关设计模式----装饰者模式与代理模式内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(97)

评论列表共有 0 条评论

立即
投稿
返回
顶部