zoukankan      html  css  js  c++  java
  • 模板模式

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

      首先介绍一下模板模式。模板模式即是在基类定义一个算法框架,将一些步骤延迟在子类中实现。使得子类不用改变算法结构,就可以重写算法步骤的细节。 模板模式 最基本的结构包括,一个定义了主逻辑方法的接口。一个实现了接口的主逻辑方法和逻辑中各个步骤的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                             

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

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

  • 相关阅读:
    串匹配(C/C++实现)
    稀疏数组-矩阵存储【C语言实现】
    mysql frm、MYD、MYI数据文件恢复,导入MySQL中
    我们为什么要分库分表?
    golang 使用goto进行多错误处理
    mongodb 查看、创建、修改、删除索引
    MyBatis中模糊搜索使用like匹配带%字符时失效问题
    MySQL 用 limit 为什么会影响性能?
    【java框架】SpringBoot(10) -- SpringBoot巧用 @Async提升API接口并发能力
    【Java代码之美】 -- Java17新特性初探
  • 原文地址:https://www.cnblogs.com/liumz0323/p/10424323.html
Copyright © 2011-2022 走看看