• java设计模式-----20、模板方法模式


      概念:

      Template Method模式也叫模板方法模式,是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为。

      模板方法模式的应用场景

      Template Method模式一般应用在具有以下条件的应用中:

      1、具有统一的操作步骤或操作过程

      2、具有不同的操作细节

      3、存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同

      模板方法模式的应用实例

       1、在造房子的时候,地基、走线、水管都一样,只有在建筑的后期才有加壁橱加栅栏等差异。

       2、西游记里面菩萨定好的 81 难,这就是一个顶层的逻辑骨架。

      3、spring 中对 Hibernate 的支持,将一些已经定好的方法封装起来,比如开启事务、获取 Session、关闭 Session 等,程序员不重复写那些已经规范好的代码,直接丢一个实体就可以保存。

      模板方法模式的结构

     

      模板方法模式的角色和职责

      1、AbstractClass:抽象类的父类

      2、ConcreteClass:具体的实现子类

      3、templateMethod():模板方法,具体步骤方法的执行顺序(步骤)

      4、method1()与method2():具体步骤方法(细节)

       下面用代码来实现一下:我们举个例子,加入我们要组装汽车,步骤是,先组装车头,再组装车身,最后组装车尾

      这样,我们先建造AbstractClass(其中包含template模板,执行顺序)

    /*
     * 组装车(AbstractClass)
     */
    public abstract class MakeCar {
        //组装车头
        public abstract void makeCarHead();
        
        //组装车身
        public abstract void makeCarBody();
        
        //组装车尾
        public abstract void makeCarTail();
        
        //汽车组装流程(template())
        public void makeCar(){
            this.makeCarHead();
            this.makeCarBody();
            this.makeCarTail();
        }
    }

      再新建ConcreteClass(具体的实现细节)

     1 //组装公交车
     2 public class MakeBus extends MakeCar{
     3 
     4     @Override
     5     public void makeCarHead() {
     6         System.out.println("组装公交车车头");
     7     }
     8 
     9     @Override
    10     public void makeCarBody() {
    11         System.out.println("组装公交车车身");
    12     }
    13 
    14     @Override
    15     public void makeCarTail() {
    16         System.out.println("组装公交车车尾");
    17     }
    18 }
     1 /*
     2  * 组装SUV
     3  */
     4 public class MakeSuv extends MakeCar{
     5 
     6     @Override
     7     public void makeCarHead() {
     8         System.out.println("组装SUV车头");
     9     }
    10 
    11     @Override
    12     public void makeCarBody() {
    13         System.out.println("组装SUV车身");
    14     }
    15 
    16     @Override
    17     public void makeCarTail() {
    18         System.out.println("组装SUV车尾");
    19     }
    20 }

      最后运行一下

     1 public class MainClass {
     2     public static void main(String[] args) {
     3         MakeCar makeBus = new MakeBus();
     4         makeBus.makeCar();
     5         
     6         System.out.println("===========================");
     7         
     8         MakeCar makeSuv = new MakeSuv();
     9         makeSuv.makeCar();
    10     }
    11 }

      运行结果:

     

       这样,用户不必关心具体的执行流程(步骤)了。

      模板方法模式的优缺点:

      优点: 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。

      缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

      注意事项:

      为防止恶意操作,一般模板方法都加上 final 关键词。

  • 相关阅读:
    lightdb fdw性能测试
    postgresql各版本不向后兼容重大特性
    lightdb copy from where\values多值加载时过滤数据
    lightdb生成pwr快照
    原百万访问量博客http://blog.chinaunix.net/uid/20656672.html不再维护(10年前数百篇oracle/teradata性能优化、故障处理案例)
    lightdb lt_bulkload,比copy更高效的导入方式以及jdbc copy实现
    lightdb/postgresql domain详解
    Oracle 23c? What happened 20c&22c
    postgresql/lightdb vacuum对性能的影响及彻底理解表膨胀
    postgresql/lightdb保留关键字与非保留关键字
  • 原文地址:https://www.cnblogs.com/xiaobai1226/p/8629441.html
Copyright © 2020-2023  润新知