马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。 也就是说,我们先做一个抽象类,然后里面加一些未实现的方法,其中有一个方法是final声明的,这个方法它是调用这些未实现的方法的,而这个抽象类需要子类来继承,来实现这些未实现的方法,然后再写一个测试类,实例化这个子类,然后调用那个final的方法就可以啦! 呵呵! 小弟说的很不专业,不过大概的流程就是这样的,还望高手不要见怪!
首先写一个抽象类:
public abstract class TemplateMethodPattern
{
/**
* 首先,这个模型要能够被发动起来,别管是手摇发动,
* 反正是要能够发动起来,那这个实现要在实现类里啦
*/
protected abstract void start();
//能发动,还要能停下来
protected abstract void stop();
//喇叭会出声音,是滴滴叫,还是哗哗叫
protected abstract void alarm();
//引擎会轰隆隆的向,不响那是假的
protected abstract void engineBoom();
//那模型应该会跑吧! 别管是人推的,还是电力驱动,总之要会跑
final public void run()
{
//先发动汽车
this.start();
//引擎开始轰鸣
this.engineBoom();
//喇叭想让它响就响,不想让它响就不响
if(this.isAlarm())
{
this.alarm();
}
//到达目的地就停车
this.stop();
}
//钩子方法,默认喇叭是会响的
protected boolean isAlarm()
{
return true;
}
}
注意: protected boolean isAlarm()这个方法的返回值,实在子类中进行操作的,它里面有一个设置喇叭会不会响的一个方法,然后将设置后的boolean值传进来然后就在run里面就判断,如果是true的话,那就鸣笛,否则就不响;
下面就是实现抽象类的子类:
public class HummerH1Model extends TemplateMethodPattern
{
private boolean alarmFlag = true; //是否要响喇叭
protected void alarm()
{
System.out.println("悍马h1鸣笛...");
}
protected void engineBoom()
{
System.out.println("悍马h1引擎声音是这样....");
}
protected void start()
{
System.out.println("悍马h1发动...");
}
protected void stop()
{
System.out.println("悍马h1停车...");
}
protected boolean isAlarm()
{
return this.alarmFlag;
}
//要不要响喇叭,是有客户来决定的
public void setAlarm(boolean isAlarm)
{
this.alarmFlag = isAlarm;
}
}
然后就是测试的类:
public class CLient2
{
public static void main(String args[])
{
HummerH1Model h1 = new HummerH1Model();
h1.setAlarm(true);
h1.run(); //汽车跑起来啦
}
}
|