首页 > 其他 > 详细

模版方法模式(Template Method)

时间:2014-01-24 13:35:42      阅读:273      评论:0      收藏:0      [点我收藏+]
模板方法模式定义了一个算法的步骤,并允许次类别为一个或多个步骤提供其实践方式。
让次类别在不改变算法架构的情况下,重新定义算法中的某些步骤。

模版方法模式的核心思想:
Java抽象类时,经常会遇到模版模式;抽象类中给出程序的骨架和轮廓,在抽象类中编写主方法,
申明抽象方法,迫使继承父类的子类实现剩余的逻辑;
注意:模版类必须是抽象类,定义一个主方法,该方法为外部程序调用的入口(一般申明为final)

这个方法可以实现对多个模版的调用,这个类中定义子类要继承的实现的抽象方法,这些方法强制子类实现;


简单点说,就是父类控制着子类的业务逻辑,而子类根据不同的业务来实现父类的抽象方法;

一个简单计算器的设计与实现:

bubuko.com,布布扣

模版类AbstractCalculator.java

public abstract class AbstractCalculator
{
    //定义一个主方法(模版方法)
    public final int calculate(String str1,String str2)
    {
        int arrayInt[] = split(str1,str2);
        return calculate(arrayInt[0],arrayInt[1]);    
    }

    public abstract int calculate(int num1,int num2);

    public int[] split(String str1,String str2)
    {
        String array[] = str1.split(str2);
        int arrayInt[] = new int[2];
            arrayInt[0] = Integer.parseInt(array[0]);
        arrayInt[1] = Integer.parseInt(array[1]);
        return arrayInt;    
    }
}


public class Plus extends AbstractCalculator
{
    public int calculate(int num1,int num2)
    {
        return (num1 + num2);
    }
}


public class Minus extends AbstractCalculator
{
    public int calculate(int num1,int num2)
    {
        return (num1-num2);
    }
}

public class Multiply extends AbstractCalculator
{
    public int calculate(int num1,int num2)
    {
        return (num1*num2);
    }
}

public class Divide extends AbstractCalculator
{
    public int calculate(int num1,int num2)
    {
        return (num1/num2);
    }
}

public class Default extends AbstractCalculator
{
    public int calculate(int num1,int num2)
    {
        return 0;
    }
}

public class MainTest
{
    public static void main(String[] args)
    {
        while(true)
        {
            //接收表达式的输入
            System.out.println("准备输入数据...");
            String str1 = System.console().readLine();

            //初始化实例
            AbstractCalculator calculator;

            String str2 = "";
            if(str1.indexOf("+") != -1)
            {
                calculator = new Plus();
                str2 = "\\+";
            }else if(str1.indexOf("-") != -1)
            {
                calculator = new Minus();
                str2 = "\\-";
            }else if(str1.indexOf("*") != -1)
            {
                calculator = new Multiply();
                str2 = "\\*";
            }else if(str1.indexOf("/") != -1)
            {
                calculator = new Divide();
                str2 = "\\/";
            }else
            {
                calculator = new Default();
            }
            
            //开始计算
            int value = calculator.calculate(str1,str2);
            System.out.println("计算结果是="+value);    
        }
    }
}

Java中主要应用在Java EE的开发请求处理的HttpServlet,Struts2,Spring 也是依据这种框架来实现的。





模版方法模式(Template Method)

原文:http://blog.csdn.net/zhaoming262350/article/details/18717547

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!