fbpx
维基百科

模板方法

模板方法模型是一種行為設計模型和设计模式模板方法(template method)是一個定義在父類別的方法,负责处理流程、算法的不变部分。模板方法會调用多個定義在父類別的其他工具方法(helper method),而這些方法是算法的可变部分,有可能只是抽象方法並沒有實作。模板方法僅決定這些抽象方法的執行順序,這些抽象方法由子類別負責實作,並且子類別不允許覆盖模板方法(即不能重写处理流程)。

模板方法模式:UML類圖


这种设计模式是一种控制反转的实现方式。因为高层代码不再确定(控制)算法的处理流程。

用法 编辑

模板方法模式多用在:

  • 某些類別的演算法中,實做了相同的方法,造成程式碼的重複。
  • 控制子類別必須遵守的一些事項。
  • ...

用例(Java) 编辑

 /**  * An abstract class that is common to several games in  * which players play against the others, but only one is  * playing at a given time.  */    abstract class Game {    private int playersCount;    abstract void initializeGame();    abstract void makePlay(int player);    abstract boolean endOfGame();    abstract void printWinner();    /* A template method : */  final void playOneGame(int playersCount) {  this.playersCount = playersCount;  initializeGame();  int j = 0;  while (!endOfGame()){  makePlay(j);  j = (j + 1) % playersCount;  }  printWinner();  }  } //Now we can extend this class in order to implement actual games:  class Monopoly extends Game {    /* Implementation of necessary concrete methods */    void initializeGame() {  // ...  }    void makePlay(int player) {  // ...  }    boolean endOfGame() {  // ...  }    void printWinner() {  // ...  }    /* Specific declarations for the Monopoly game. */    // ...    }  class Chess extends Game {    /* Implementation of necessary concrete methods */    void initializeGame() {  // ...  }    void makePlay(int player) {  // ...  }    boolean endOfGame() {  // ...  }    void printWinner() {  // ...  }    /* Specific declarations for the chess game. */    // ...    }  public class Player {  public static void main(String[] args) {  Game chessGame = new Chess();  chessGame.initializeGame();  chessGame.playOneGame(1); //call template method  }  } 

C++ 例子 编辑

#include<iostream> // abstract class BaseClass {  protected:  virtual void someMethod() = 0; public:  void ThisIsTemplateMethod() { someMethod(); } }; class ExtendedClass_one : public BaseClass { protected:  void someMethod() override {  puts("[ExtendedClass_one] Re-Define method here.");  } }; class ExtendedClass_two : public BaseClass { protected:  void someMethod() override {  puts("[ExtendedClass_two] Re-Define method here.");  } }; int main() {  BaseClass* one = new ExtendedClass_one;  one->ThisIsTemplateMethod();  BaseClass* two = new ExtendedClass_two;  two->ThisIsTemplateMethod();  return 0; } 


模板方法, 模型是一種行為設計模型和设计模式, template, method, 是一個定義在父類別的方法, 负责处理流程, 算法的不变部分, 會调用多個定義在父類別的其他工具方法, helper, method, 而這些方法是算法的可变部分, 有可能只是抽象方法並沒有實作, 僅決定這些抽象方法的執行順序, 這些抽象方法由子類別負責實作, 並且子類別不允許覆盖, 即不能重写处理流程, 模式, uml類圖这种设计模式是一种控制反转的实现方式, 因为高层代码不再确定, 控制, 算法的处理流程, 用法, 编辑模式多用在. 模板方法模型是一種行為設計模型和设计模式 模板方法 template method 是一個定義在父類別的方法 负责处理流程 算法的不变部分 模板方法會调用多個定義在父類別的其他工具方法 helper method 而這些方法是算法的可变部分 有可能只是抽象方法並沒有實作 模板方法僅決定這些抽象方法的執行順序 這些抽象方法由子類別負責實作 並且子類別不允許覆盖模板方法 即不能重写处理流程 模板方法模式 UML類圖这种设计模式是一种控制反转的实现方式 因为高层代码不再确定 控制 算法的处理流程 用法 编辑模板方法模式多用在 某些類別的演算法中 實做了相同的方法 造成程式碼的重複 控制子類別必須遵守的一些事項 用例 Java 编辑 An abstract class that is common to several games in which players play against the others but only one is playing at a given time abstract class Game private int playersCount abstract void initializeGame abstract void makePlay int player abstract boolean endOfGame abstract void printWinner A template method final void playOneGame int playersCount this playersCount playersCount initializeGame int j 0 while endOfGame makePlay j j j 1 playersCount printWinner Now we can extend this class in order to implement actual games class Monopoly extends Game Implementation of necessary concrete methods void initializeGame void makePlay int player boolean endOfGame void printWinner Specific declarations for the Monopoly game class Chess extends Game Implementation of necessary concrete methods void initializeGame void makePlay int player boolean endOfGame void printWinner Specific declarations for the chess game public class Player public static void main String args Game chessGame new Chess chessGame initializeGame chessGame playOneGame 1 call template method C 例子 编辑 include lt iostream gt abstract class BaseClass protected virtual void someMethod 0 public void ThisIsTemplateMethod someMethod class ExtendedClass one public BaseClass protected void someMethod override puts ExtendedClass one Re Define method here class ExtendedClass two public BaseClass protected void someMethod override puts ExtendedClass two Re Define method here int main BaseClass one new ExtendedClass one one gt ThisIsTemplateMethod BaseClass two new ExtendedClass two two gt ThisIsTemplateMethod return 0 取自 https zh wikipedia org w index php title 模板方法 amp oldid 73468662, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。