模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
简单描述:多个类的行为是差不多的,只是某些局部不一样,则交由父类中抽象出这些子类中相同的部分,父类中定义出不同的部分的接口(方法),这些不同部分的方法则由子类去实现,通过多态,实现代码的重用
大话设计模式中的截图:
例子代码:
AbstractClass类:
1 package com.longsheng.templatemethod;
2
3 public abstract class AbstractClass {
4
5 /**
6 * 这个方法主要是抽象出所有子类中都一样的过程,具体的不同则交由子类实现
7 */
8 public final void sameMethod() {
9 concreteMethodA();
10 System.out.println("父类中的方法");
11 concreteMethodB();
12 }
13
14 public abstract void concreteMethodA();
15
16 public abstract void concreteMethodB();
17
18 }
具体类ConcreteClassA类:
1 package com.longsheng.templatemethod;
2
3 public class ConcreteClassA extends AbstractClass {
4
5 @Override
6 public void concreteMethodA() {
7 System.out.println("ConcreteClassA--concreteMethodA");
8 }
9
10 @Override
11 public void concreteMethodB() {
12 System.out.println("ConcreteClassA--concreteMethodB");
13 }
14
15 }
具体类ConcreteClassB类:
1 package com.longsheng.templatemethod;
2
3 public class ConcreteClassB extends AbstractClass {
4
5 @Override
6 public void concreteMethodA() {
7 System.out.println("ConcreteClassB--concreteMethodA");
8 }
9
10 @Override
11 public void concreteMethodB() {
12 System.out.println("ConcreteClassB--concreteMethodB");
13 }
14
15 }
客户端代码:
1 package com.longsheng.templatemethod;
2
3 public class Client {
4
5 public static void main(String[] args) {
6 AbstractClass mAbstractClass = null;
7 mAbstractClass = new ConcreteClassA();
8 mAbstractClass.sameMethod();
9 mAbstractClass = new ConcreteClassB();
10 mAbstractClass.sameMethod();
11 }
12
13 }
运行结果:
1 ConcreteClassA--concreteMethodA
2 父类中的方法
3 ConcreteClassA--concreteMethodB
4 ConcreteClassB--concreteMethodA
5 父类中的方法
6 ConcreteClassB--concreteMethodB
有时候一个过程由一系列步骤构成,从高层次上看,这个过程是相同的,只是有些步骤的实现可能不同,这时候就应该考虑使用模板方法模式了。
当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。
大话设计模式_模板方法模式(Java代码),布布扣,bubuko.com
时间: 2024-10-14 00:13:51