首页 > 代码库 > Java设计模式(七)策略模式 模板模式
Java设计模式(七)策略模式 模板模式
(十三)策略模式
策略模式定义了多个封装起来的算法,封装的算法可以相互替换,并且算法的变化不会影响到使用算法的客户。借用另一位大神的例子。
interface ICalculator{ public int calculate(String exp); } abstract class AbstractCalculator{ 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; } } class Plus extends AbstractCalculator implements ICalculator{ public int calculate(String exp){ int arrayInt[] = split(exp, "\\+"); return arrayInt[0]+arrayInt[1]; } } class Minus extends AbstractCalculator implements ICalculator{ public int calculate(String exp){ int arrayInt[] = split(exp,"-"); return arrayInt[0] = arrayInt[1]; } } class Multiply extends AbstractCalculator implements ICalculator{ public int calculate(String exp){ int arrayInt[] = split(exp,"\\*"); return arrayInt[0] * arrayInt[1]; } } public class Strategy { public static void main(String[] args){ String exp = "2*8"; ICalculator cal = new Multiply(); System.out.println(cal.calculate(exp)); } }系统提供不同算法的实现,对于各种算法封装好,用户决定使用哪个算法。策略模式多使用在算法决策系统中,例如电子商务价格算法。跟抽象类很相似,我感觉。
(十四)模板方法模式
模板方法的意义是一个父类方法提供大部分的算法,子类完成剩余的算法。父类调用子类的实现。
abstract class TemplateCalc{ //主方法 public final int calculate(String exp,String opt){ int array[] = split(exp,opt); return calculate(array[0],array[1]); } 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; } abstract public int calculate(int num1,int num2); } class PlusTemp extends TemplateCalc{ public int calculate(int num1,int num2){ return num1 + num2; } } public class Template{ public static void main(String[] args){ TemplateCalc tem = new PlusTemp(); System.out.println(tem.calculate("12*23", "\\*")); } }将一个子类初始化,调用父类的 calculate 方法,父类执行完分解,调用子类的相加,其实 * 并不代表乘,只是个切分符号。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。