模板模式的定义是“在操作中定义一个函数的骨架,将某些步骤推迟到其子类中实现”。

优点:

  • 它是非常常见的代码复用技术,这是其主要优点。

使用场景:

  • 当子类中有共同的行为时,应将其移到一个单独的公共类中,以避免重复。

模板模式的UML:

10-1.png

模板模式的实现:

步骤 1:

创建一个Game抽象类。

// 这是一个抽象类
public abstract class Game { 
    abstract void initialize(); 
    abstract void start(); 
    abstract void end(); 
    
    public final void play() { 
        // 初始化游戏 
        initialize(); 

        // 开始游戏 
        start(); 
          
        // 结束游戏 
        end(); 
    } 
}

步骤 2:

创建一个继承Game抽象类的Chess类,并给出其方法的定义。

// 这是一个类
public class Chess extends Game { 
    @Override 
    void initialize() { 
        System.out.println("Chess Game Initialized! Start playing."); 
    } 
    
    @Override 
    void start() { 
        System.out.println("Game Started. Welcome to the chess game!"); 
    } 
    
    @Override 
    void end() { 
        System.out.println("Game Finished!"); 
    } 
}

步骤 3:

创建一个继承Game抽象类的Soccer类,并给出其方法的定义。

// 这是一个类
public class Soccer extends Game { 
    @Override 
    void initialize() { 
        System.out.println("Soccer Game Initialized! Start playing."); 
    } 
    
    @Override 
    void start() { 
        System.out.println("Game Started. Welcome to the Soccer game!"); 
    } 
    
    @Override 
    void end() { 
        System.out.println("Game Finished!"); 
    } 
}

步骤 4:

创建一个TemplatePatternDemo类。

// 这是一个类
public class TemplatePatternDemo { 
    public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException { 
        Class c = Class.forName(args[0]); 
        Game game = (Game) c.newInstance(); 
        game.play();   
    } 
}

输出:

根据传入的参数,程序会输出对应游戏的初始化、开始和结束信息。例如,当传入Chess时:

Chess Game Initialized! Start playing.
Game Started. Welcome to the chess game!
Game Finished!

当传入Soccer时:

Soccer Game Initialized! Start playing.
Game Started. Welcome to the Soccer game!
Game Finished!

标签: Design Patterns, Design Patterns教程, 设计模式, 软件设计, 结构型模式, 行为型模式, 单例模式, 工厂模式, 观察者模式, 中介者模式, 访问者模式