鱼C论坛

 找回密码
 立即注册
查看: 2171|回复: 0

java设计模式之模板方法模式

[复制链接]
发表于 2015-1-22 16:09:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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();   //汽车跑起来啦
   }
}
2015-01-22 16:11:27 的屏幕截图.png




本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 23:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表