首页 > 代码库 > 设计模式--模板方法模式
设计模式--模板方法模式
设计模式--模板方法模式
1 概述
1.1 定义
模板方法模式(Template Method Design)定义一个操作的算法的框架,而将一些步骤延迟到子类中。使得子类可以在不改变算法结构的情况下,重新定义算法的某些特定步骤。
1.2 应用
JDK中InputStream中的read(byte b[], int off, int len)方法就依赖于read()方法,而read()方法就是InputStream子类实现。
还有许多类似的模板方法模式。之前自己学了1个月左右的Android,在学了过程中就发现Android中基本上都是继承,当时不是很懂,现在看来其大部分就是使用了类似模板方法模式,使得我们仅仅需要修改我们想要的代码就能够运行。如:我们自己写的Activity,我们仅仅重写我们想要的方法(如:onCreate()让它在启动时做一些事情),然后在Mainfest中注册就能够启动,具体怎么启动、怎么销毁都由模板Activity类实现。
1.3 类图
模板方法模式涉及的角色如下:
- AbstractClass抽象模板角色:由模板方法与基本方法构成。模板方法(一般为final,不希望子类重写)就是该算法的框架,该框架需要实现对基本方法的调用,完成固定的逻辑。
- ConcreteClass具体角色:实现基本方法,已完成模板角色定义的模板方法。
2 详解
1 public abstract class AbstractClass { 2 // 基本的方法(子类实现) 3 protected abstract void primitiveOperation1(); 4 protected abstract void primitiveOperation2(); 5 6 // 模板方法(调用基本方法完成算法) 7 public final void templateMethod(){ 8 /** 9 * 调用基本方法,完成相关逻辑 10 */ 11 primitiveOperation1(); 12 primitiveOperation2(); 13 } 14 } 15 16 public class ConcreteClass1 extends AbstractClass { 17 @Override 18 protected void primitiveOperation1() { 19 System.out.println("ConcreteClass1.primitiveOperation1"); 20 } 21 22 @Override 23 protected void primitiveOperation2() { 24 System.out.println("ConcreteClass1.primitiveOperation2"); 25 } 26 } 27 28 public class Client { 29 public static void main(String[] args) { 30 AbstractClass class1 = new ConcreteClass1(); 31 // 调用模板方法,完成相关逻辑 32 class1.templateMethod(); 33 } 34 }output: 35 ConcreteClass1.primitiveOperation1 36 ConcreteClass1.primitiveOperation2
小结一下
模板方法模式用的特别的广泛,基本上在哪里都能看到。它让我们的在代码在可扩展性与一致性有了良好的是实现。
模板方法模式有许多的变形,如Android中绝大部分我们仅仅是需要继承相关类,修改一些方法就能够实现我们想要的结果。
之前我在看集合类时,发现其定义了需要的接口(如List接口),还有需要的抽象类(如AbstractList),然后具体的集合类都继承了该接口(如ArrayList)。现在看来,抽象类(如AbstractList)实现了模板方法,模板方法又依赖于基本方法。
设计模式--模板方法模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。