设计模式-模板模式

1、模板模式简介

定义:一种类行为型模式,定义一个操作中的骨架,而将实现步骤的延迟到子类中,使得子类可以不改变该骨架结构的情况下重定义某些特定步骤

目标:不改变步骤实现不同的结果

解决问题:解决因为小部分差异而导致的代码冗余

优点:封装了不变部分,扩展可变部分。它把认为是不变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展,在父类中提取了公共的部分代码,便于代码复用

   部分方法是由子类实现的,因此子类可以通过扩展方式增加相应的功能,符合开闭原则。

缺点:对每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象,间接地增加了系统实现的复杂度

   父类中的抽象方法由子类实现,子类执行的结果会影响父类的结果,这导致一种反向的控制结构,它提高了代码阅读的难度

   由于继承关系自身的缺点,如果父类添加新的抽象方法,则所有子类都要改一遍

实现:

 1 /**抽象类**/
 2 public abstract class fatherClass {
 3     /**抽象类**/
 4     public void TemplateMethod(){
 5         //抽象方法
 6         Template1();
 7         Template2();
 8         Template3();
 9     }
10     /**具体方法**/
11     public void Template1(){
12         System.out.println("模板方法壹号");
13     }
14     /**抽象方法1**/
15     public abstract void Template2();
16     /**抽象方法2**/
17     public abstract void Template3();
18 }
19 
20 /**具体子类1**/
21 public class son1Class extends fatherClass {
22     @Override
23     public void Template2() {
24         System.out.println("son1 抽象方法壹号");
25     }
26 
27     @Override
28     public void Template3() {
29         System.out.println("son1 抽象方法贰号");
30     }
31 }
32 
33 /**具体子类2**/
34 public class son2Class extends fatherClass {
35     @Override
36     public void Template2() {
37         System.out.println("son2 抽象方法壹号");
38     }
39 
40     @Override
41     public void Template3() {
42         System.out.println("son2 抽象方法贰号");
43     }
44 }
45 
46 /**测试方法**/
47 public class test {
48     public static void main(String[] args) {
49         fatherClass fatherClass = new son1Class();
50         fatherClass.TemplateMethod();
51         System.out.println("========================================");
52         fatherClass fatherClass1 = new son2Class();
53         fatherClass1.TemplateMethod();
54     }
55 }
56 
57 测试结果:
58 模板方法壹号
59 son1 抽象方法壹号
60 son1 抽象方法贰号
61 ========================================
62 模板方法壹号
63 son2 抽象方法壹号
64 son2 抽象方法贰号
原文地址:https://www.cnblogs.com/carblack/p/14109591.html