模板模式

  模板模式是一种非常好的,万金油的设计模式。此设计模式在我的项目中也多有体现。故写出来总结一下。

  首先介绍一下模板模式。模板模式即是在基类定义一个算法框架,将一些步骤延迟在子类中实现。使得子类不用改变算法结构,就可以重写算法步骤的细节。 模板模式 最基本的结构包括,一个定义了主逻辑方法的接口。一个实现了接口的主逻辑方法和逻辑中各个步骤的protected方法的基类。以及若干个继承自主逻辑方法并根据自身业务的差异性,重写了基类的protected步骤方法的子类。

  下面写一个盖房子的代码例子参考。

 1        //盖房子接口
 2   public interface IBuildHouse{
 3     //建造(主逻辑方法)
 4     void build();  
 5 
 6   }
 7 
 8   //盖房子基类
 9   public class BaseBuildHouse implement IBuildHouse{
10             //建造(主逻辑方法)
11             @override
12             public void build(){
13                 //打地基
14                 this.groundFoundation();
15                 //造墙
16                 this.buildWall();
17                 //造屋顶       
18                 this.buildRoof();
19             }
20 
21             //打地基
22             protected void groundFoundation(){"打地基"}
23 
24             //造墙
25             protected void buildWall(){}
26     
27             //造屋顶       
28             protected void buildRoof(){}
29  }       
30  
31            //盖水泥房
32             public class BuildCementHouse extends BaseBuildHouse {
33              //重写造墙
34             @override
35             protected void buildWall(){"造水泥墙"}
36     
37             //重写造屋顶
38             @override  
39             protected void buildRoof(){"造水泥屋顶"}
40              }
41  
42            //盖木房
43             public class BuildWoodHouse extends BaseBuildHouse {
44              //重写造墙
45             @override
46             protected void buildWall(){"造木墙"}
47     
48             //重写造屋顶
49             @override  
50             protected void buildRoof(){"造木屋顶"}
51              }
52 
53             //调用的代码
54              //建水泥房
55              new BuildCementHouse().build(); 
56               //建木房
57              new BuildWoodHouse().build();
58 
59 
60 
61 
62 
63 
64                             

   由以上例子可知。基类定义了盖房子的主方法,和各个步骤的方法。如果要盖水泥房,就重写盖屋顶和盖墙的步骤方法。而打地基是不用重写的,因为水泥房和木房打地基的方式都一样(假设)。

    结合以上例子, 就可以更好理解 “ 基类定义一个算法框架,将一些步骤延迟在子类中实现。使得子类不用改变算法结构,就可以重写算法步骤的细节” 这句话了。

原文地址:https://www.cnblogs.com/liumz0323/p/10424323.html