• java设计模式--行为型模式--模板方法


    什么是模板方法,这个有待考虑,看下面:

      

     1                                                     模板方法
     2  概述
     3     定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
     4     
     5     TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
     6  
     7  
     8  适用性
     9     1.一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
    10 
    11     2.各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。
    12       首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。
    13       最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
    14 
    15     3.控制子类扩展。
    16  
    17  
    18  参与者
    19     1.AbstractClass
    20       定义抽象的原语操作(primitiveoperation),具体的子类将重定义它们以实现一个算法的各步骤。
    21       实现一个模板方法,定义一个算法的骨架。
    22       该模板方法不仅调用原语操作,也调用定义在AbstractClass或其他对象中的操作。
    23 
    24     2.ConcreteClass
    25       实现原语操作以完成算法中与特定子类相关的步骤。

    测试类:

    1 public class Test {
    2 
    3     public static void main(String[] args) {
    4         Template temp = new TemplateConcrete();
    5         temp.update();
    6     }
    7 }
    public abstract class Template {
    
        public abstract void print();
        
        public void update() {
            System.out.println("开始打印");
            for (int i = 0; i < 10; i++) {
                print();
            }
        }
    }
    1 public class TemplateConcrete extends Template {
    2 
    3     @Override
    4     public void print() {
    5         System.out.println("这是子类的实现");
    6     }
    7 }

    在来一个例子,有帮助理解:

     1 package com.ming.mode.template;
     2 
     3 public abstract class People {
     4 
     5     final void stage(){//这个是我们的抽象模板
     6         begin();
     7         if(gouzi()){
     8             middle();
     9         }
    10         end();
    11     }
    12     
    13     private void begin(){
    14         System.out.println("开始了哈...");
    15     }
    16     
    17     
    18     
    19     abstract void middle();
    20     
    21     private void end(){
    22         System.out.println("结束了哈...");
    23     }
    24     
    25     //这个是钩子方法,用于判断哪些步骤不需要
    26     boolean gouzi(){
    27         return true;
    28     }
    29 }
     1 package com.ming.mode.template;
     2 
     3 public class XiaoMing extends People{
     4 
     5     @Override
     6     void middle() {
     7         
     8         System.out.println("小明的笑话中间阶段人生........big,big。。。");
     9         
    10     }
    11 }
     1 package com.ming.mode.template;
     2 
     3 public class ZhangSan extends People{
     4 
     5     @Override
     6     void middle() {
     7         System.out.println("张三的中间阶段...");
     8         
     9     }
    10 
    11     @Override
    12     boolean gouzi() {
    13         
    14         return false;
    15     }
    16     
    17 }
     1 package com.ming.mode.template;
     2 
     3 public class Test {
     4 
     5     public static void main(String[] args) {
     6         XiaoMing xiaoming=new XiaoMing();
     7         xiaoming.stage();
     8         
     9         ZhangSan zhangsan=new ZhangSan();
    10         zhangsan.stage();
    11     }
    12 }

    模板方法模式就是在一个方法中定义一个算法的骨架,面将一些步骤延迟到子类中。模板方法使得子类可以在不改变某些算法结构的情况下,重新定义算法中的某些步骤。

    我觉得这玩意抽象在流程中可能很适用......

  • 相关阅读:
    在数据库中 存储图片 以及 在界面中显示图片(存储图片路径)- 这种方法相对与存储二进制文件好
    # 会员注册与登录模块
    文本文件从磁盘读取、写入
    简单的web三层架构系统【第五版】
    Nginx负载均衡中后端节点服务器健康检查的一种简单方式
    编译安装php-7.1.17及部分扩展
    wkhtmltopdf 安装过程不包含php扩展部分
    Centos6下安装中文字体
    xen 配置vm 跟随xen server一起启动
    CENTOS 升级Nodejs 到最新版本
  • 原文地址:https://www.cnblogs.com/huzi007/p/3988270.html
Copyright © 2020-2023  润新知