java模板方法模式

模板方法是通过继承实现的复用,通过一个抽象父类来实现;针对不同的业务类型或者算法,在父类中定义一个模板方法,而其中的不同的实现细节由各自的子类去实现;相同的业务逻辑或者算法可以在父类中统一实现,减少代码量,实现复用,并且也不会改变总体的执行步骤。

先上源码:

public abstract class AbstractTemplate {
    
    /*
     * 设置成final防止子类重写此方法
     */
    public final void templateMethod(){
        concreteMethod();
        abstractMethod();
        hookMethod();
    }
    
    /*
     * 抽象方法需要由子类实现
     */
    protected abstract void abstractMethod();
    
    /*
     * 钩子方法,子类中可实现,可不实现
     */
    protected void hookMethod(){};
    
    private final void concreteMethod(){
        //类似业务或逻辑中相同的代码
    }
    
}

模板方法模式达到了很好的实现了高可用低耦合的技术,也符合开闭原则,能够减少冗余代码,易于扩展。

在java中有很多典型的使用模板方法模式的例子,例如JDK中非常著名的AQS(AbstractQueuedSynchronizer),他就是使用了模板方法模式。

在父类的AbstractQueuedSynchronizer类中定义了统一的release,acquire方法,而他们调用的tryRelease,tryAcquire方法就是需要不同的子类去实现,像ReentrantLock就分别去实现这两个方法,这是典型的模板方法模式用法示例,具体可以研究下jdk中的源码:java.util.concurrent.locks.AbstractQueuedSynchronizer。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值