0%

设计模式_01_装饰与适配

一.装饰者

1.Diagrams

decker

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
//接口Man
public interface Man {
void eat();
void sleep();
void fight();
}

//类NormalMan 实现 接口Man
public class NormalMan implements Man{
//重写接口中的全部抽象方法
@Override
public void eat() {
System.out.println("stop playing around and eat!");
}

@Override
public void sleep() {
System.out.println("sleep like a log ");
}

@Override
public void fight() {
System.out.println("fight ability : 5 ");
}
}

//类IronMan 实现 接口Man
public class IronMan implements Man {
//这里将被装饰者作为成员变量
private NormalMan normalMan;

public IronMan() {
}

public IronMan(NormalMan normalMan) {
this.normalMan = normalMan;
}

//以下方法不需要被加强 则直接调用方法
@Override
public void eat() {
normalMan.eat();
}

@Override
public void sleep() {
normalMan.sleep();
}

//这里需要加强 则重写以加强方法
@Override
public void fight() {
System.out.println("fight ability : 100 up");
}
}

//Test
@Test
public void deckerTest() {
NormalMan normalMan = new NormalMan();
normalMan.eat();
normalMan.sleep();
normalMan.fight();

IronMan ironMan = new IronMan(normalMan);
ironMan.eat();
ironMan.sleep();
ironMan.fight();
}

//console
stop playing around and eat!
sleep like a log
fight ability : 5

stop playing around and eat!
sleep like a log
fight ability : 100 up

二.适配器

1.Diagrams

decker

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
//接口Monk
public interface Monk {
void longSeat();
void patter();
void eatMeat();
void pullWillow();
}

//类MonkAdapter 实现接口Monk 将方法存入适配器
public class MonkAdapter implements Monk{
@Override
public void longSeat() {

}

@Override
public void patter() {

}

@Override
public void eatMeat() {

}

@Override
public void pullWillow() {

}
}

//继承适配器,需要什么就拿什么
public class huaMonk extends MonkAdapter{
public void eatMeat() {
System.out.println("吃肉ing...");
}

public void pullWillow() {
System.out.println("倒拔杨柳ing...");
}
}

public class yixiuMonk extends MonkAdapter{
public void longSeat() {
System.out.println("打坐ing...");
}

public void patter() {
System.out.println("念经ing...");
}
}

@Test
public void adapterTest() {
yixiuMonk yixiu = new yixiuMonk();
yixiu.longSeat();
yixiu.patter();

huaMonk hua = new huaMonk();
hua.eatMeat();
hua.pullWillow();
}

//console

打坐ing...
念经ing...

吃肉ing...
倒拔杨柳ing...