设计模式之模板方法

模板方法

什么是模板方法?

子类继承父类时,不同子类之间不应该有重复代码。定义一个操作中的算法骨架,而将一些步骤延迟到子类。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的特定步骤。

模板方法的应用场景

当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤再更详细的层次上的实现可能不同时,我们使用该方法。

大白话解释:父类中有一个方法实现一个功能,子类重写这个方法具体实现功能,但是不同子类实现该功能时只有少部分代码不一致,因此我们应该再提炼可以重复书写的代码出来,这就是模板方法。

怎么实现模板方法

抽象介绍
public abstract class Parent {

    public abstract void primitiveOperation();

    public void TemplateMethod(){
        System.out.println("重复代码片段");
        primitiveOperation();
    }
}
class Son extends Parent{
    @Override
    public void primitiveOperation() {
        System.out.println("子类特有代码");
    }
}
class Client{
    public static void main(String[] args) {
        Parent p = new Son();
        p.TemplateMethod();
    }
}

具体实现

举个例子:一张试卷多个人考

public abstract class Exam {

    public abstract String firstAnswer();

    public void answer(){
        System.out.print("1+1=?");
        System.out.println("答案:"+firstAnswer());
    }
}
class StudentA extends Exam{

    @Override
    public String firstAnswer() {
        return "A的答案:3";
    }
}
class StudentB extends Exam{

    @Override
    public String firstAnswer() {
        return "B的答案:2";
    }
}

class Client1{
    public static void main(String[] args) {
        Exam a = new StudentA();
        Exam b = new StudentB();
        a.answer();
        b.answer();
    }
}

个人体会

实际上模板方法是通过创建多种子类的方式来避免代码重复,“多种子类”而非多个同种子类,实际上我不太明白为什么这里不把这个延迟到子类的操作直接在父类中添加一个属性,我们直接修改这个属性不是也可以吗。也许是为了符合单一职责原则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值