zoukankan      html  css  js  c++  java
  • 设计模式-模板方法模式

    模板方法模式

    • 定义

    模板方法模式(Template Method),定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。[DP]


    • 优缺点

    优点:

    1. 代码复用
    2. 子类的返回值决定父类的行为

    缺点:


    • 特点
    1. 父类将子类中重复的代码抽到一个公用方法当中
    2. 可以由子类的返回值来决定这个公用方法怎么执行(钩子函数)

    • 结构

    AbstractClass:拥有模板方法的父类

    ConcreteClass:使用模板方法的子类


    • 代码

    例子:两个学生考试,试卷题目一样,答案不一样,打印出来

            父类

    /**
     * @ Author     :fonxi
     * @ Date       :2019/5/22 16:00
     * @ Description:模板方法类
     */
    public abstract class AbstractClass {
        abstract String primitiveOperation1();
        abstract String primitiveOperation2();
    
        public void templateMethod(){
            System.out.print("设计模式有多少种:");
            System.out.println(primitiveOperation1());
            System.out.print("抽象类中不能有非抽象方法:");
            System.out.println(primitiveOperation2());
        }
    }
    

      使用模板方法的子类

    /**
     * @ Author     :fonxi
     * @ Date       :2019/5/22 16:02
     * @ Description:实现类
     */
    public class ConcreteClass1 extends AbstractClass{
        @Override
        String primitiveOperation1() {
            return "23";
        }
    
        @Override
        String primitiveOperation2() {
            return "错";
        }
    }
    

      

    /**
     * @ Author     :fonxi
     * @ Date       :2019/5/22 16:10
     * @ Description:实现类
     */
    public class ConcreteClass2 extends AbstractClass {
        @Override
        String primitiveOperation1() {
            return "25";
        }
    
        @Override
        String primitiveOperation2() {
            return "对";
        }
    }
    

      

    /**
     * @ Author     :fonxi
     * @ Date       :2019/5/22 16:01
     * @ Description:客户端调用类
     */
    public class TestController {
        public void print(){
            AbstractClass abstractClass;
    
            abstractClass = new ConcreteClass1();
            System.out.println("学生一的试卷:");
            abstractClass.templateMethod();
    
            System.out.println("---------------------------------------------------------------------------");
    
            abstractClass = new ConcreteClass2();
            System.out.println("学生二的试卷");
            abstractClass.templateMethod();
        }
    }
    

      输出:

    学生一的试卷:
    设计模式有多少种:23
    抽象类中不能有非抽象方法:错
    ---------------------------------------------------------------------------
    学生二的试卷
    设计模式有多少种:25
    抽象类中不能有非抽象方法:对
    

      


    • 总结

    把的重复的代码抽取到模板方法当中,起到复用的效果,模板方法模式算是最常用到的设计模式之一了,。

  • 相关阅读:
    青春如同奔流的江河,一去不回来不及道别
    关于RESOURCE_SEMAPHORE等待类型
    sql server 2008 The fulltext filter daemon host (FDHost) process has stopped abnormally.
    [转]SQL Server 2008 R2 Pricing
    64bit sql server 2008 sp1 使用lock pages in memory 具体操作
    [转]Fun with Locked Pages, AWE, Task Manager, and the Working Set…
    关掉和开启win7的Windows Search服务
    How to recreate the msdb database in SQL Server 2005
    Kimberly L. Tripp的sp_helpindex2 for sql server 2005/2008,并修复了for sqk2k8的一个bug
    表无索引为什么sp_spaceused 中的index_size不为0
  • 原文地址:https://www.cnblogs.com/fonxi/p/10908817.html
Copyright © 2011-2022 走看看