模板方法模式

定义

定义:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

优点及缺点

优点

  1. 封装不变,扩展可变
  2. 提取公共部分代码,易于维护
  3. 行为由父类控制,子类实现

缺点

  1. 抽象类定义了抽象方法,子类的多态会影响父类的结果

使用场景

子类有公有的方法,逻辑基本相同,可以通过钩子函数约束其行为达到不同的行为效果。父类抽象共性,子类实现个性。

示例代码

public abstract class HummerModel
{
    public abstract void start();
    public abstract void alerm();
    public abstract void engineBoom();
    public abstract void stop();
    public  void run(){
    	this.start();
    	this.engineBoom();
    	if(isAlarm()){
    		this.alerm();
    	}
    	this.stop();
    }
    //钩子函数,子类对该方法进行重写,父类根据子类的行为而产生影响
    public boolean isAlarm(){
    	return true;
    }
}

public class Hummer1 extends HummerModel
{
	private boolean isAlarm = true;
	//子类设置钩子
	public void setAlarm(boolean isAlarm)
	{
		this.isAlarm = isAlarm;
	}

	@Override
	public void start()
	{
         System.out.println("H1 start...");		
	}

	@Override
	public void alerm()
	{
		System.out.println("H1 alerm...");
		
	}

	@Override
	public void engineBoom()
	{
		System.out.println("H1 engineBoom...");		
	}

	@Override
	public void stop()
	{
		System.out.println("H1 stop...");
		
	}

	@Override
	public boolean isAlarm()
	{
	
		return this.isAlarm;
	}

	

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值