java设计模式之模版方法

一.简介

 我们往往遇见一些问题我们知道它的解决流程,或者说是大概的思路,但是我们不知道它的具体的实现.就像我们的tomcat针对发起的http请求,它知道请求的流程,但是不知道具体逻辑和返回数据,这样我们继承了它的httpservlet类,实现它们的doget方法和dopost方法.实现我们需要实现的具体细节.

二.结构

  • 抽象模版类:定义一个或者多个抽象方法,这些方法称为基本操作,在定义一个具体方法,这个具体方法通过调用基本方法来确定顶层逻辑;这个具体操作称为模版方法;
  • 具体类:实现抽象模版所定义的抽象操作.
  • 类图

代码

package templetemethod;

/**
 * Created by ZouHaiBo on 2018/1/20.
 */

/**
 * Created by 10250 on 2018/1/19.
 */
// 贷款 抽象类
abstract class TempleteLoans {

    // 定义模版方法 怎么贷款
    public final void loans() {
        before();
        countInterest();
        coutMouth();
    }

    // 计算时间
    protected abstract void coutMouth();

    // 计算利息
    protected abstract void countInterest();
    // 钩子方法
    protected abstract void before();

}

// 平安银行
class PingAnBank extends TempleteLoans {

    @Override
    protected void coutMouth() {
        System.out.println("平安银行计算 时间");
    }

    @Override
    protected void countInterest() {
        System.out.println("平安银行计算 利息");
    }

    @Override
    protected void before() {
        System.out.println("平安银行欢迎你");
    }
}

// 平安银行
class ZhaoshangBank extends TempleteLoans {

    @Override
    protected void coutMouth() {
        System.out.println("招商银行计算 时间");
    }

    @Override
    protected void countInterest() {
        System.out.println("招商银行计算 利息");
    }

    @Override
    protected void before() {
        System.out.println("招商银行欢迎您");
    }
}

public class Client {

    public static void main(String[] args) {
        // 平安银行
        PingAnBank pingAnBank = new PingAnBank();
        pingAnBank.loans();

        // 招商银行
        ZhaoshangBank zhaoshangBank = new ZhaoshangBank();
        zhaoshangBank.loans();
    }
}
//output
//平安银行欢迎你
//平安银行计算 利息
//平安银行计算 时间
//招商银行欢迎您
//招商银行计算 利息
//招商银行计算 时间


三.缺点

  • 概念复杂性:从面向对象的本质来讲,父类负责抽象,子类负责具体实现,但是模版方法父类视线了大部分的逻辑,子类只是视线了少量的步骤,而且提供给父类调用.违反了面向对象的一般性抽象思维的原因是它的设计初衷是最大限度的重用;
  • 实现复杂性:这种重用方式的代价就是每个子类都背负父类的给它的包袱.
  • 父类如果有带参构造,子类必须要去实现;
  • 子类在构造器里要注意使用父类成员变量的顺序.
  •  子类的编写者必须了解父类的实现
  • 父类的改动很容易波及到子类

四.遵守的原则

 开闭原则

五.参考文献

 大话设计模式


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值