设计模式Java设计模式——模版方法模式
代长亚一、模版方法模式概述
模版方法模式是极为常见的设计模式之一。在实际工作中,你可能已经在不经意间使用了该模式。此模式需要抽象类与具体子类协同工作,抽象类用于勾勒算法的轮廓和骨架,具体子类则负责填充算法中的各个逻辑步骤,不同子类的填充方式各异。汇总这些基本方法的方法被称为模版方法,它在抽象类中以具体方法的形式定义。
(一)模板方法模式所涉及的角色
- 抽象模版角色
- 定义一个或多个抽象操作,这些抽象操作是顶级逻辑的组成步骤,被称为基本操作。同时,定义并实现一个模版方法,此模版方法给出顶级逻辑的骨架,而逻辑的具体实现则推迟到子类中完成。
- 具体模版角色
- 实现父类中定义的一个或多个抽象方法,这些方法是顶级逻辑的组成部分。不同的具体模版可以为这些抽象方法提供不同的实现,从而使顶级逻辑的实现各不相同。
(二)举例说明
以一个有趣但不太恰当的例子来说明,比如《如何说服女生上床》(这里仅为举例,不代表任何不当价值观)这部经典文章(假设存在)中描述的从认识女生到上床有一些不变步骤:巧遇、展开追求、牵手、接吻等(一共八大步骤,这里简化为四个主要步骤进行代码示例)。这八大步骤就像是定义好的模版方法,而每个人针对每个步骤根据自身情况会有不同的方法,这就是具体实现。
以下是相关代码实现:
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
|
public abstract class 如何说服女生上床 { public void 模版方法() { 巧遇(); 追求(); 牵手(); 接吻(); }
public abstract void 巧遇(); public abstract void 追求(); public abstract void 牵手(); public abstract void 接吻(); }
public class 读者一 extends 如何说服女生上床 { @Override public void 巧遇() { System.out.println("读者一自己的巧遇方法。。。"); }
@Override public void 追求() { System.out.println("读者一自己的追求方法。。。"); }
@Override public void 牵手() { System.out.println("读者一自己的牵手方法。。。"); }
@Override public void 接吻() { System.out.println("读者一自己的接吻方法。。。"); } }
public class 读者二 extends 如何说服女生上床 { @Override public void 巧遇() { System.out.println("读者二自己的巧遇方法。。。"); }
@Override public void 追求() { System.out.println("读者二自己的追求方法。。。"); }
@Override public void 牵手() { System.out.println("读者二自己的牵手方法。。。"); }
@Override public void 接吻() { System.out.println("读者二自己的接吻方法。。。"); } }
|
客户端调用代码如下:
1 2 3 4 5 6
| public static void main(String[] args) { 如何说服女生上床第一个读该书的人 = new 读者一(); 第一个读该书的人.模版方法(); 如何说服女生上床第二个读该书的人 = new 读者二(); 第二个读该书的人.模版方法(); }
|
二、总结
模版方法模式的核心是准备一个抽象类,在其中将部分逻辑以具体方法实现,同时声明一些抽象方法迫使子类实现剩余逻辑。不同子类可以通过不同方式实现这些抽象方法,从而实现剩余逻辑的多样化。通过这种方式,代码结构更加清晰,具有更好的扩展性和可维护性,能够适应不同场景下的需求变化。继续努力,加油!