模板方法模式

模板方法模式


前言

模板方法模式,就如同其名字一样,定义了方法的基本骨架。其定义了算法/方法的骨架,并且向外部开放了一些需要由子类来负责具体实现的算法/方法。其主要包含了模板方法、基本方法和抽象方法,模板方法就是一个骨架,可能由多个基本方法和抽象方法组成,而基本方法则是类中自己实现的方法,抽象方法就是需要被多个类具体实现的方法。我们需要使用抽象模板类,只需要定义具体类继承抽象类,并且重写需要具体实现的方法即可,可以提高代码的复用性。

实现

存在一个抽象模板水果类,其存在抽象方法吃水果,而吃水果需要每个方法一样的洗水果,每个方法不同的处理水果,最后一样的吃果实,如下:


public abstract class Fruit {
    /**
     * 模板方法,记录算法的骨架
     * */
    public final void eat(){
        wash();
        handler();
        eatFruit();
    }

    /**
     * 抽象方法,由子类实现
     * */
    abstract void handler();


    /**
     * 基本方法
     * */
    void wash(){
        System.out.println("洗水果");
    }

    void eatFruit(){
        System.out.println("吃水果");
    }
}

public class Apple extends Fruit{
    @Override
    void handler() {
        System.out.println("切皮");
    }
}

public class Watermelon extends Fruit{
    @Override
    void handler() {
        System.out.println("切块");
    }
}

优缺点

优点:
1:提高代码的复用性。抽象模板类包含一些对象需要复用的方法,只需要继承就可以使用
2:符合开闭原则。每个子类只需要重写抽象方法实现自己具体的逻辑即可
缺点:
1:子类创建过多。每次需要不同的具体方法实现都需要创建一个信类
2:模板方法修改困难。模板方法为了防止被修改使用了final声明,如果对模板方法进行修改,修改了抽象方法的调用,可能会影响到所有子类的实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值