博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java设计模式之模板方法模式
阅读量:6847 次
发布时间:2019-06-26

本文共 1900 字,大约阅读时间需要 6 分钟。

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

模板方法模式概念:

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

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

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

转载地址:http://itlul.baihongyu.com/

你可能感兴趣的文章
线段树
查看>>
常用应用软软件
查看>>
UTF-8 带签名和不带签名的区别
查看>>
php错误级别的设置方法
查看>>
C# WinForm开发系列学习 地址 很详细
查看>>
WIN10常用快捷键
查看>>
详细理解servlet实现的几种方式和生命周期
查看>>
黄聪:C#带cookie模拟登录百度
查看>>
JavaScript——HashMap实现
查看>>
maven 检查依赖冲突和版本冲突
查看>>
待解决问题
查看>>
使用icon替换你的网页图标(转)
查看>>
Android权限管理之Android 6.0运行时权限及解决办法
查看>>
图片像素与大小
查看>>
linux磁盘读写性能优化
查看>>
android webview
查看>>
masscan
查看>>
html5--1.5 文本元素
查看>>
oracle 正则表达式
查看>>
《设计模式之禅》--单例扩展:多例模式
查看>>