设计模式:Template Method--模板方法模式

模板方法模式

把具有特定步骤算法中的某些必要处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为。就是指:一个抽象类中,有一个主方法,再定义1...n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用,先看个关系图:

 就是在AbstractCalculator类中定义一个主方法calculate,calculate()调用spilt()等,Plus和Minus分别继承AbstractCalculator类,通过对AbstractCalculator的调用实现对子类的调用。

 

实例1

/**
 * 组装车
 */
public abstract class MakeCar {
    //组装车头
    public abstract void makeHead();

    //组装车身
    public abstract void makeBody();

    //组装车尾
    public abstract void makeTail();


    public void make() {
        this.makeHead();
        this.makeBody();
        this.makeTail();
    }
}

*************************************************
public class MakeBus extends MakeCar {
    @Override
    public void makeHead() {
        System.out.println("bus:组装车头");
    }

    @Override
    public void makeBody() {
        System.out.println("bus:组装车身");
    }

    @Override
    public void makeTail() {
        System.out.println("bus:组装车尾");
    }
}


***********************************

public class MakeJeep extends MakeCar {
    @Override
    public void makeHead() {
        System.out.println("jeep:组装车头");
    }

    @Override
    public void makeBody() {
        System.out.println("jeep:组装车身");
    }

    @Override
    public void makeTail() {
        System.out.println("jeep:组装车尾");
    }
}


*******************************************

public class MainClass {

    public static void main(String[] args) {
        //通过调用make方法实际就是调用实现类的操作步骤,步骤相同,细节不同
        MakeCar car = new MakeBus();
        car.make();

        System.out.println("**************88888");
        MakeCar car1 = new MakeJeep();
        car1.make();
    }
}

 

示例2 


public abstract class AbstractCalculator {
    /*主方法,实现对本类其它方法的调用*/
    public final int calculate(String exp, String opt) {
        int array[] = split(exp, opt);
        return calculate(array[0], array[1]);
    }

    /*被子类重写的方法*/
    abstract public int calculate(int num1, int num2);

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


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

*********************************************
public class MainClass {
    public static void main(String[] args) {
        String exp = "8+8";
        AbstractCalculator cal = new Plus();
        int result = cal.calculate(exp, "\\+");
        System.out.println(result);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值