第二章 模板设计模式(自己理解 )

模板设计模式可以让代码得到复用

首先我们不使用模板设计模式,创建两个类,一个Student类和Teachar 类

public class Student {

    /**
     * 这个方法描述学生的一天
     */
    public void day(){
        qiChuang();
        xiShu();
        chiZaoCan();
        doSome();
        chiWanFan();
        shuiJiao();
    }

    public void qiChuang(){
        System.out.println("起床");
    }

    public void xiShu(){
        System.out.println("洗漱");
    }

    public void chiZaoCan(){
        System.out.println("吃早餐");
    }

    public void doSome(){
        System.out.println("学生上学,学习");
    }

    public void chiWanFan(){
        System.out.println("吃晚饭");
    }

    public void shuiJiao(){
        System.out.println("睡觉");
    }

}
public class Teachar {
    /**
     * 这个方法描述老师的一天
     */
    public void day(){
        qiChuang();
        xiShu();
        chiZaoCan();
        doSome();
        chiWanFan();
        shuiJiao();
    }

    public void qiChuang(){
        System.out.println("起床");
    }

    public void xiShu(){
        System.out.println("洗漱");
    }

    public void chiZaoCan(){
        System.out.println("吃早餐");
    }

    public void doSome(){
        System.out.println("老师正在课堂上授课,教授学生知识");
    }

    public void chiWanFan(){
        System.out.println("吃晚饭");
    }

    public void shuiJiao(){
        System.out.println("睡觉");
    }
}

以上是没有使用模板设计模式的Student和Teachar
 存在的问题:
      第一:算法没有得到重复的使用。
      第二:代码没有得到复用。

 


以下使用模板设计模式

        既然两个类里面东西都一样,除了dosome方法,我使用一个抽象类把相同的方法放在一个里面final修饰的方法里面,dosome方法用抽象方法,老师跟学习,继承抽象类,实现方法

        Teacher和Student都是Person
                * 1. Person就是模板方法设计模式当中的模板类。
                * 2. day()方法就是模板方法设计模式当中的模板方法。

模板类通常是抽象类

    模板方法添加了final之后,这个方法无法被覆盖,这样核心的算法也可以得到保护。
    模板方法定义核心的算法骨架,具体的实现步骤可以延迟到子类当中去实现。
    核心算法一方面是得到了保护,不能被改变。另外一方面就是算法得到了重复使用。
    另外代码也得到了服用,因为算法中某些步骤的代码是固定的。
    这些固定的代码不会随着子类的变化而变换,这一部分代码可以写到模板类当中。

public abstract class Person { 

    public final void day(){
        // 第一步
        qiChuang();
        // 第二步
        xiShu();
        // 第三步
        chiZaoCan();
        // 第四步
        doSome();
        // 第五步
        chiWanFan();
        // 第六步
        shuiJiao();
    }

    // 其中的某些步骤,不会随着子类的变化而变化,这些代码可以写到父类中,得到代码复用。
    public void qiChuang(){
        System.out.println("起床");
    }

    public void xiShu(){
        System.out.println("洗漱");
    }

    public void chiZaoCan(){
        System.out.println("吃早餐");
    }

    // 这一步是要做,但是具体这一步怎么做,子类说了算。
    public abstract void doSome();

    public void chiWanFan(){
        System.out.println("吃晚饭");
    }

    public void shuiJiao(){
        System.out.println("睡觉");
    }
}

测试学生类和老师类

//学生类
public class Student extends Person{
    @Override
    public void doSome() {
        System.out.println("学生在上课");
    }
}
//老师类
public class Teachar extends Person{
    @Override
    public void doSome() {
        System.out.println("老师在授课");
    }
}

总测试

public class Test {
    public static void main(String[] args) {
        Person student = new Student();
        student.day();
        Person Teachar = new Teachar();
        Teachar.day();
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值