行为型模式主要涉及算法和对象间的职责分配。通过使用对象组合,行为型模式可以描述一组对象应该如何协作来完成一个整体任务。
模板(Template)方法:定义一个算法的骨架,将一些操作步骤延迟到子类中实现,使得子类可以再不改变算法骨架的情况下,重定义某些特定的步骤。
优点:
- 封装了不变的部分,扩展子类的部分
- 便于代码复用,满足开闭原则
缺点:
- 每个实现都需要定义一个子类。容易使类数量变高
- 依赖抽象实现,子类执行结果影响父类结果,这是一种反向控制的结构,不利于理解
示例:
我们现在有个画板,需要绘制一些图形,而绘制的动作就可以交给子类来实现
public static void main(String[] args) {
Artboard artboard = new Circle();
artboard.draw();
}
// 画板
abstract static class Artboard{
// 绘画
public void draw(){
// 画一个圆形
drawCircle();
}
// 绘制圆形
abstract void drawCircle();
}
static class Circle extends Artboard{
@Override
void drawCircle() {
System.out.println("绘制一个圆形");
}
}
而如果我们需要扩展,则只需要新增一个子类即可
public static void main(String[] args) {
Artboard artboard = new RedCircle();
artboard.draw();
}
static class RedCircle extends Artboard{
@Override
void drawCircle() {
System.out.println("绘制一个红色圆形");
}
}