Java设计模式(四)----模板模式

模板模式,虽然说的高端,其实都见过,在读jdk源码时,常常发现有一些抽象类,定义了一些方法,由不同的子类去实现了,这就是模板模式。。。

通俗一点就是这么说,在一个操作中,可能存在相同的操作步骤1,操作步骤2,操作步骤3,但是操作步骤4又存在着一些细微的差别,就需要由不同的子类来定义各自的实现,但是需要基于规定好的算法框架下。

举例子的话,其实对于考试,就是如此,发试卷,收试卷,就是相同的操作,但是做试卷确是不同的,每个人的答案不一样啊。

1.抽象类,定义共性方法,定义个性方法接口原则

/**
 * @author: wayne
 * @desc:
 * @date: 2017/12/27 16:36
 * @version: 1.0
 */
public abstract class Exam {
    /**
     * 分发试卷
     */
    public final void distributePage(){
        System.out.println("发试卷");
    }

    /**
     * 收回试卷
     */
    public final void takeBackPage(){
        System.out.println("收试卷");
    }

    /**
     * 做题
     */
    public abstract void doExercise();

    /**
     * 考试中
     */
    public final void inExaming(){
        distributePage();
        doExercise();
        takeBackPage();
    }
}

2.考试是针对学生时,产生学生实体

/**
 * @author: wayne
 * @desc:
 * @date: 2017/12/27 16:41
 * @version: 1.0
 */
public class Student extends Exam{

    private int num;

    private String name;

    public Student(int num, String name) {
        this.num = num;
        this.name = name;
    }

    @Override
    public void doExercise() {
        System.out.println("学号:"+num+"--"+"姓名:"+name+" 做题结束");
    }
}

3.测试

/**
 * @author: wayne
 * @desc:
 * @date: 2017/12/27 16:43
 * @version: 1.0
 */
public class TestTempleteDesign {

    public static void main(String[] args) {
        Exam exam1 = new Student(1,"张三");
        Exam exam2 = new Student(2,"李四");
        Exam exam3 = new Student(3,"王五");

        exam1.inExaming();
        exam2.inExaming();
        exam3.inExaming();
    }
}

发试卷
学号:1--姓名:张三 做题结束
收试卷
发试卷
学号:2--姓名:李四 做题结束
收试卷
发试卷
学号:3--姓名:王五 做题结束
收试卷

上述是针对学生的考试,那么如果将来产生针对老师的考试,只要新建Teacher实体类,调用考试方法,原有不需要修改,符合“开闭”原则。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值