模板方法模式(Template Method)

首先定义一个抽象的模板类,这个抽象类包括一个final的处理方法,还有需要子类继承的抽象方法,和固定的处理方法。

/**
 * 模板方法,定义一个电信日志处理的模板方法
 * @author Administrator
 *
 */
abstract class Template {
/*
* 处理日志
*/
public final void ImplementationWork() {
getFile();
openFile();
readLogFramework();
ProcessingSingleRowLogs();
if (!isNeedUse()) {
clear();
}
}

/*
* 是否还需要使用
*/
protected boolean isNeedUse() {
return true;
}

/*
* 1、获得文件
*/
private void getFile() {
System.out.println("获得文件");
}

/*
* 2、打开文件
*/
private void openFile() {
System.out.println("打开文件");
}

/*
* 3、读取日志结构
*/
private void readLogFramework() {
System.out.println("读取日志结构");
}

/*
* 4、处理单行日志
*/
protected abstract void ProcessingSingleRowLogs();

/*
* 5、清理工作
*/
private void clear() {
System.out.println("清理工作");
}
}

实现类

public class ErrorLog extends Template {
@Override
protected void ProcessingSingleRowLogs() {
System.out.println("错误日志保存,检测");
}
@Override
protected boolean isNeedUse() {
return false;
}
}

public class ConsumerLog extends Template {
@Override
protected void ProcessingSingleRowLogs() {
System.out.println("消费日志进行记账,统计");
}
}

public class BusinessModificationLog extends Template {
@Override
protected void ProcessingSingleRowLogs() {
System.out.println("业务修改日志进行回访");
}
}

main方法

public class TemplateTest {
public static void main(String[] args) {
//错误日志的操作
System.out.println("============错误日志的操作============");
Template template1=new ErrorLog();
template1.ImplementationWork();
//业务修改日志的操作
System.out.println("============业务修改日志的操作============");
Template template2=new ConsumerLog();
template2.ImplementationWork();
//消费日志的操作
System.out.println("============消费日志的操作============");
Template template3=new BusinessModificationLog();
template3.ImplementationWork();
}
}

下面来解释一下,抽象类定义了算法的骨架,包括所有具体类都需要的执行方法(private),需要延迟到子类加载的方法(abstract),还有扩展方法(子类可以重写也可以不重写的)

private:这部分是不需要子类实现的,指的是所有具体类要执行的相同方法,然后提取出来,这样就实现了代码的复用。

abstract:这部分的代码就是必须要子类实现的方法,也就是具体类要执行的不同的方法。

扩展方法:模板定义的有具体行为的可继承的方法,子类选择性继承,父类通过返回值动态的实现一些行为。


优点:模板方法把不变的行为放在父类,需要变的行为放在子类实现,实现了代码的复用,然后使用扩展方法(也可以成为钩子)使程序更加的灵活。

缺点:java是单继承的,子类继承了模板就不能再继承其他的类了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值