Design Patterns教程-模板模式
模板模式的定义是“在操作中定义一个函数的骨架,将某些步骤推迟到其子类中实现”。
优点:
- 它是非常常见的代码复用技术,这是其主要优点。
使用场景:
- 当子类中有共同的行为时,应将其移到一个单独的公共类中,以避免重复。
模板模式的UML:
模板模式的实现:
步骤 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!