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
72public 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
52import 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)不同点:代理模式增加的是不重要的功能,装饰者模式增加的是主要功能
最后
以上就是悲凉西装最近收集整理的关于设计模式----装饰者模式与代理模式的全部内容,更多相关设计模式----装饰者模式与代理模式内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复