前言
记得刚开始工作的时候看老鸟的代码很多看不懂,随着工作经验的增加发现当初看不懂人家的代码是因为自己没有深刻理解设计模式。今天我打算写一个设计模式系列博客,就是把开发中常用的设计模式总结下。
模版模式
定义:
把做一件事情的过程中重复的步骤抽取出来定义成骨架方法(模版模式的核心思想),各自不同的步骤定义成抽象方法,让其子类实现。
例子:
比如我们去饭店消费,一般都是点餐、就餐、买单、是否给消费(当然这个是否给消费就是个人的经济能力了)这四个步骤。我们发现前三个步骤是我们每个人去饭店就餐必须的步骤,换句话说也就是重复步骤,那么我们可以把前三个步骤定义成骨架方法,是否给消费这个看每个人的个人情况,所以我们定义成抽象方法,让其子类自己做决定。伪代码如下:
//抽象类,骨架方法
abstract Restaurant{
void Dinner() {
1.点餐
2.就餐
3.买单
//调用抽象方法,根据子类的具体实现决定是否给消费
4.giveTips();
}
abstract void giveTips();
}
class Soho extend Restaurant{
//实现giveTips()方法,决定是否给小费
void giveTips(){
5.给小费
}
}
代码:
1 public abstract class Restaurant { 2 3 4 /** 定义骨架方法 */ 5 void Dinner(){ 6 System.out.println("1.点餐"); 7 System.out.println("2.就餐"); 8 System.out.println("3.买单"); 9 giveTips(); 10 } 11 12 /** 定义抽象方法,让其子类实现 */ 13 abstract public void giveTips(); 14 }
1 public class Soho extends Restaurant { 2 3 @Override 4 public void giveTips() { 5 System.out.println("4.给小费100元!"); 6 } 7 8 }
1 public class Canteen extends Restaurant { 2 @Override 3 public void giveTips() { 4 System.out.println("4.没有小费!"); 5 } 6 }
测试结果:
1 public class Test { 2 3 public static void main(String[] args) { 4 Restaurant restaurant1 = new Soho(); 5 Restaurant restaurant2 = new Canteen(); 6 restaurant1.Dinner(); 7 System.out.println("==============================="); 8 restaurant2.Dinner(); 9 } 10 11 }
1.点餐 2.就餐 3.买单 4.给小费100元! =============================== 1.点餐 2.就餐 3.买单 4.没有小费!
总结
在开发中,如果有重复步骤代码我们不妨把重复步骤的代码使用模版方法抽取出来,定义成骨架方法,把各自不同的步骤定义成抽象方法让其子类实现,这样代码既美观又逻辑清楚。