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

简介:

宋丹丹姐的一个小品,说把大象放入冰箱分为几步骤,三步、第一步:把冰箱门打开,第二步:把大象装进去,第三步:把冰箱门关上。就是这样的一个小品,可以说是其实简化的一个模板方法。把鸡蛋装进冰箱分为几步,同样也是这个道理。


模板方法模式概念:

把一些共同的行为抽象出来,作为父类公共使用,一些具体的步骤延迟到子类来执行。这样就可以不改变算法的基础架构,就可以重新定义算法的某些特定的步骤,达到特定的行为模式


网上很多例子都是拿喝茶,泡茶,喝咖啡,泡咖啡等来说事情,我也不会例外。喝茶和喝咖啡都是有共同的流程的,比如:烧水,把水倒入杯中,都是共同的方法,共同的行为。所以可以抽象出来,步骤都是一样的。其实就是泡茶和泡咖啡的行为不同,所以抽象出来,具体的子类去重新定义这些算法步骤来实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package  com.design.test1;
 
/**
  * Created by sdc on 2017/8/1.
  */
public  abstract  class  AbstractCookingAction {
 
     /**
      * 喝.......
      */
     public  final  void  cooking() {
 
         //步骤1:煮水
         boilWater();
 
         //步骤2:倒水
         pourWater();
 
         //步骤3:如果没人加东西,则就是喝白开水了。
         if (ifOrNotAddBatching()) {
             addBatching();
         }
 
         //步骤4:
         make();
 
     }
 
     //制作饮料
     protected  abstract   void  make();
 
     //加入配料
     protected  abstract  void  addBatching();
 
     //煮水
     private  void  boilWater() {
         System.out.print( "把水煮开......." );
     }
 
     //把水倒入杯中
     private  void  pourWater() {
         System.out.print( "把水倒入杯中......." );
     }
 
     /**
      * 是否加入配料,比如咖啡,奶茶,有人加柠檬等
      * @return
      */
     protected  boolean  ifOrNotAddBatching() {
         // 默认设置
         return  true ;
     }
 
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package  com.design.test1;
 
/**
  * Created by sdc on 2017/8/1.
  */
public  class  TeaCooking  extends  AbstractCookingAction {
 
 
     @Override
     protected  void  make() {
         System.out.print( "制作茶....." );
     }
 
     @Override
     protected  void  addBatching() {
         System.out.print( "加入配料" );
     }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package  com.design.test1;
 
/**
  * Created by sdc on 2017/8/1.
  */
public  class  CoffeeCooking  extends  AbstractCookingAction {
 
 
     @Override
     protected  void  make() {
         System.out.print( "制作咖啡....." );
     }
 
     @Override
     protected  void  addBatching() {
         System.out.print( "加入糖" );
     }
 
 
}


这就是简单的一个设计模式出来了,重在积累学习,有时间就要学点知识,看会,和自己实际写又是两把事情。


模板方法还有一些设计场景,自己根据业务场景,尽量重构出来,自己试试看看自己写过的代码是否可以这样抽取出来。


本文转自 豆芽菜橙 51CTO博客,原文链接:http://blog.51cto.com/shangdc/1952805


相关文章
|
10天前
|
设计模式 安全 Java
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
|
5天前
|
设计模式 前端开发 Java
19:Web开发模式与MVC设计模式-Java Web
19:Web开发模式与MVC设计模式-Java Web
15 4
|
5天前
|
设计模式 存储 前端开发
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
22 4
|
5天前
|
设计模式 缓存 监控
JAVA设计模式之结构型模式
结构模型:适配器模型、桥接模型、过滤器模型、组合模型、装饰器模型、外观模型、享受元模型和代理模型。
18 3
|
9天前
|
设计模式 算法 Java
Java基础教程(19)-设计模式简述
【4月更文挑战第19天】设计模式是软件设计中反复使用的代码设计经验,旨在提升代码的可重用性、可扩展性和可维护性。23种模式分为创建型、结构型和行为型三类。创建型模式如工厂方法、抽象工厂、建造者、原型和单例,关注对象创建与使用的分离。结构型模式涉及对象组合,如适配器、装饰器、外观等,增强结构灵活性。行为型模式专注于对象间职责分配和算法合作,包括责任链、命令、观察者等。设计模式提供标准化解决方案,促进代码交流和复用。
|
10天前
|
设计模式 Java
Java 设计模式:混合、装饰器与组合的编程实践
【4月更文挑战第27天】在面向对象编程中,混合(Mixins)、装饰器(Decorators)和组合(Composition)是三种强大的设计模式,用于增强和扩展类的功能。
16 1
|
10天前
|
设计模式 消息中间件 Java
Java 设计模式:探索发布-订阅模式的原理与应用
【4月更文挑战第27天】发布-订阅模式是一种消息传递范式,被广泛用于构建松散耦合的系统。在 Java 中,这种模式允许多个对象监听和响应感兴趣的事件。
26 2
|
10天前
|
设计模式 算法 Java
Java 设计模式:深入模板方法模式的原理与应用
【4月更文挑战第27天】模板方法模式是一种行为设计模式,主要用于定义一个操作中的算法的框架,允许子类在不改变算法结构的情况下重定义算法的某些特定步骤。
19 1
|
10天前
|
设计模式 算法 Java
Java 设计模式:探索策略模式的概念和实战应用
【4月更文挑战第27天】策略模式是一种行为设计模式,它允许在运行时选择算法的行为。在 Java 中,策略模式通过定义一系列的算法,并将每一个算法封装起来,并使它们可以互换,这样算法的变化不会影响到使用算法的客户。
17 1
|
10天前
|
设计模式 存储 安全
Java 设计模式:深入单例模式的理解与应用
【4月更文挑战第27天】单例模式是一种常用的设计模式,在 Java 开发中扮演着重要角色。此模式的主要目的是保证一个类只有一个实例,并提供一个全局访问点。
18 0