设计模式学习

模板模式

在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。子类实现

行为由父类控制,子类实现具体

如:学校规定学生必须要有 【去上学】【听课】【放学回家】这些 行为,但是每个学生去上学的实现方式不一样,有的走路去,有的奔驰接送。有的听课咬笔,有的听课睡觉。

1
2
3
4
5
6
7
8
9
10
11
12
public abstract class Game {
abstract void initialize();
abstract void startPlay();
abstract void endPlay();

//模板 play的过程 就要求是这三步
public final void play(){
initialize();
startPlay();
endPlay();
}
}

装饰模式

被装饰类 A 和装饰类 B 都实现接口 component,A 是 B 的成员变量,当使用 component.operation() 是,B 直接调用 A 的 operation 方法,但是会在调用前后执行特定装饰操作,如:

1
2
A.operation()  >>  我的名字是小花
B.operation() >> 【大家好】我的名字是小花 # 【大家好】就是装饰代码

和代理模式的区别

总结两点:
1.代理模式强调的是控制,装饰模式强调的是增强。
2.代理模式强调的是透明访问,装饰模式强调的是自由构建。

桥接模式

为了解决将抽象部分与实现部分分离,让他们都在自己的维度上有多维度地变化

核心的是解决兼容问题,通过接口对不同的实现做约束

一个空调和遥控器例子,为了让不同的空调能够兼容不同的遥控器,分别定义空调和遥控器使用接口,通过调用约束好的接口,任一遥控器就能够打开任意的空调。有点类似于某些协议制定委员会