首页 > 其他分享 >模板方法模式(Template Method)

模板方法模式(Template Method)

时间:2023-02-01 10:01:34浏览次数:44  
标签:AbstractCalculator calculate int public Template exp Method 模板 String


一个抽象类中,有一个主方法,再定义1…n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用,
就是在AbstractCalculator类中定义一个主方法calculate,calculate()调用spilt()等,Plus和Minus分别继承AbstractCalculator类,通过对AbstractCalculator的调用实现对子类的调用

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 StrategyTest {

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

我跟踪下这个小程序的执行过程:首先将exp和"\+"做参数,调用AbstractCalculator类里的calculate(String,String)方法,在calculate(String,String)里调用同类的split(),之后再调用calculate(int ,int)方法,从这个方法进入到子类中,执行完return num1 + num2后,将值返回到AbstractCalculator类,赋给result,打印出来。正好验证了我们开头的思路。


标签:AbstractCalculator,calculate,int,public,Template,exp,Method,模板,String
From: https://blog.51cto.com/u_14389461/6030686

相关文章

  • SpringBoot项目前端使用vue下载后端resources下的文件(导出模板)
     放到resources/xls/import-template.xls这个路径可以自己修改代码同步修改即可 @GetMapping(value="/downloadXls")@ApiOperation(value="下载导入模板"......
  • CURLINFO_EFFECTIVE_METHOD option
    添加CURLINFO_EFFECTIVE_METHOD选项,在curl_getinfo()的返回值中返回有效的HTTP方法。添加了curl_upkeep()函数来执行任何连接维护检查。......
  • P3379 最近公共祖先模板
    顾名思义就是求两个点的公共祖先暴力做法就是先维护每个点的父亲然后枚举但显然这样的作法查询复杂度是O(n)的就TLE了(所以需要用倍增优化:用f[i][j]表示第i个点向......
  • day14-JdbcTemplate-01
    JdbcTemplate-01看一个实际需求:如果希望使用spring框架做项目,Spring框架如何处理对数据库的操作呢?方案一:使用之前的JdbcUtils类方案二:spring提供了一个操作数据库(......
  • RestTemplate.exchange请求返回值包含list对象嵌套错误的情况
    简单做个记录,问题简单表述:使用restTemplate.exchange请求某个GET方法时,返回值的对象内包含list,list的嵌套出现错误1、问题之前一个SpringBoot项目中使用restTemplate做......
  • C++ 模板之类模板
    使用类模板,可以事先不确定成员变量的类型,假如我们要写一个先进后出的栈,这个栈既可以放入int,也可以放入long,还可以放入string,那么就需要使用模板技术,否则,类的成员变量将难以......
  • 报错HTTP 405 Method Not Allowed, Allow: POST, OPTIONS, "detail": "方法 “GET” 不
    当测试注册功能是否实现时,出现了这种情况的405:HTTP405MethodNotAllowedAllow:POST,OPTIONSContent-Type:application/jsonVary:Accept{"detail":"方法“GET......
  • ORACLE BIPUBILSHER EXCEL模板相关问题
    1.BIPublisher介绍OracleBIpublisher,它的前身是oraclexmlpublisher。它是对一数据集(数据集简单说就是一张表)的展现定义多个模板。业务用户可以通过使用通用桌面工具......
  • 压位高精模板
    structbignum{ lldat[150]; bignum(){memset(dat,0,sizeof(dat));dat[0]=1;} voidprint(){ printf("%ld",dat[dat[0]]); for(registerinti=dat[0]-1;i>=1;--i......
  • 微信开放平台之第三方平台开发,模板小程序如何提交?
    大家好,我是悟空码字今天天气晴朗,阳光普照。因为疫情影响,小羊人的增多,街上放眼望去,人烟稀少。楼下除了几个十一二岁的小男孩在玩耍,也没有像往日老人悠闲打牌、小孩嬉戏那般热......