马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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(); //汽车跑起来啦
- }
- }
复制代码
|