Radio

一个小小程序员

0%

模板模式

模版模式

在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。

示例演示:
  1. 我们定义一个抽象类,并提供一个final的方法,防止被重写

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    package test.template;

    public abstract class People {

    abstract void awake();
    abstract void eat();
    abstract void sleep();

    public final void action(){
    awake();
    eat();
    sleep();
    }

    }
  2. 创建两个实现类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    package test.template;

    public class PeopleOne extends People {
    @Override
    void awake() {
    System.out.println("peopleOne awake");
    }

    @Override
    void eat() {
    System.out.println("peopleOne eat");
    }

    @Override
    void sleep() {
    System.out.println("peopleOne sleep");
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    package test.template;

    public class PeopleTwo extends People {
    @Override
    void awake() {
    System.out.println("peopleTwo awake");
    }

    @Override
    void eat() {
    System.out.println("peopleTwo eat");
    }

    @Override
    void sleep() {
    System.out.println("peopleTwo sleep");
    }
    }
  3. 完成上述步骤,我们就可以开始演示了

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    package test.template;

    public class TemplateDemo {
    public static void main(String[] args) {
    People peopleOne =new PeopleOne();
    peopleOne.action();
    System.out.println("---------------------------------");
    People peopleTwo =new PeopleTwo();
    peopleTwo.action();
    }
    }

    运行结果:

    1
    2
    3
    4
    5
    6
    7
    peopleOne awake
    peopleOne eat
    peopleOne sleep
    ---------------------------------
    peopleTwo awake
    peopleTwo eat
    peopleTwo sleep
说明:

优点: 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。

缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

欢迎关注我的其它发布渠道