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                             

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

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

  • 相关阅读:
    mysql用户密码修改
    Java List java.lang.UnsupportedOperationException
    python __dict__
    pytest.fixture
    Python __metaclass__ 解释
    Python __new__()方法,为对象分配内存 返回对象的引用
    git 常用操作
    boto3 dynamodb 一些简单操作
    conda, pip, virtualenv 区别
    list去重后不改变排序
  • 原文地址:https://www.cnblogs.com/liumz0323/p/10424323.html
Copyright © 2011-2022 走看看