模版方法模式(Template Method)

模板方法模式定义了一个算法的步骤,并允许次类别为一个或多个步骤提供其实践方式。
让次类别在不改变算法架构的情况下,重新定义算法中的某些步骤。

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

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


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

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

模版类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 也是依据这种框架来实现的。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值