【设计模式】—— 模板方法Template

简介:

  模式意图

  定义一个类的框架,当它有不同的类时,再具体实现。

  比如,我们设计一个跨系统的客户端软件,Windows需要一套展现类,Linux需要一套,mac还需要一套。这样,只需要抽取他们的共同操作编程一个框架类,具体使用到哪个系统时,再使用对应的类,有点像C++里面的模板。

  应用场景

  1 一次性实现一个类的不变部分,其他的部分留到子类实现。

  2 各个子类提取公共部分成为超类

  3 控制子类的扩展。

  模式结构

  AbstractClass 抽象类框架

复制代码
abstract class AbstractClass{
    public void action(){
        step1();
        step2();
        newMethod();
    }
    abstract protected void step1();
    abstract protected void step2();
    abstract protected void newMethod();
}
复制代码

  Class 具体的子类,进行扩展

复制代码
class Class1 extends AbstractClass{
    protected void newMethod() {
        System.out.println("class1 newMethod");
    }
    protected void step1() {
        System.out.println("class1 step1");
    }
    protected void step2() {
        System.out.println("class1 step2");
    }
}
class Class2 extends AbstractClass{
    protected void newMethod() {
        System.out.println("class2 newMethod");
    }
    protected void step1() {
        System.out.println("class2 step1");
    }
    protected void step2() {
        System.out.println("class2 step2");
    }
}
复制代码

  全部代码

复制代码
 1 package com.xingoo.test.design.template;
 2 abstract class AbstractClass{
 3     public void action(){
 4         step1();
 5         step2();
 6         newMethod();
 7     }
 8     abstract protected void step1();
 9     abstract protected void step2();
10     abstract protected void newMethod();
11 }
12 class Class1 extends AbstractClass{
13     protected void newMethod() {
14         System.out.println("class1 newMethod");
15     }
16     protected void step1() {
17         System.out.println("class1 step1");
18     }
19     protected void step2() {
20         System.out.println("class1 step2");
21     }
22 }
23 class Class2 extends AbstractClass{
24     protected void newMethod() {
25         System.out.println("class2 newMethod");
26     }
27     protected void step1() {
28         System.out.println("class2 step1");
29     }
30     protected void step2() {
31         System.out.println("class2 step2");
32     }
33 }
34 public class Client {
35     private static AbstractClass class1 = new Class1();
36     private static AbstractClass class2 = new Class2();
37     public static void main(String[] args) {
38         class1.action();
39         class2.action();
40     }
41 }
复制代码

  运行结果

复制代码
class1 step1
class1 step2
class1 newMethod
class2 step1
class2 step2
class2 newMethod
复制代码

 

本文转自博客园xingoo的博客,原文链接:【设计模式】—— 模板方法Template,如需转载请自行联系原博主。
相关文章
|
2月前
|
设计模式 算法 Java
模板方法--设计模式
模板方法--设计模式
18 0
|
4月前
|
设计模式 算法 Java
模板方法设计模式(TemplateMethod)
模板方法设计模式(TemplateMethod)
|
6月前
|
设计模式 算法 Java
设计模式系列教程(08) - 模板方法
设计模式系列教程(08) - 模板方法
26 0
|
7月前
|
设计模式 算法
设计模式9 - 模板方法模式【Template Method Pattern】
设计模式9 - 模板方法模式【Template Method Pattern】
22 0
|
7月前
|
设计模式 算法 Java
设计模式~模板方法模式(Template method)-10
目录 (1)优点: (2)缺点: (3)使用场景: (4)注意事项: (5)应用实例: (6)Servlet Api &
34 0
|
6月前
|
设计模式 SQL 数据库
淘东电商项目(61) -聚合支付(基于模板方法设计模式管理支付回调)
淘东电商项目(61) -聚合支付(基于模板方法设计模式管理支付回调)
43 0
|
2月前
|
设计模式 算法 Java
【设计模式】springboot3项目整合模板方法深入理解设计模式之模板方法(Template Method)
【设计模式】springboot3项目整合模板方法深入理解设计模式之模板方法(Template Method)
|
4月前
|
设计模式 算法
设计模式之模板方法
设计模式之模板方法
|
10月前
|
设计模式 Java 数据库连接
Java中23种面试常考的设计模式之模板模式(Template)---行为型模式
Java中23种面试常考的设计模式之模板模式(Template)---行为型模式
67 1
|
6月前
|
设计模式 SQL 数据库
淘东电商项目(62) -聚合支付(基于模板方法设计模式管理支付回调-支付宝)
淘东电商项目(62) -聚合支付(基于模板方法设计模式管理支付回调-支付宝)
35 0