1. 程式人生 > >Template Method模式和Strategy模式有何異同

Template Method模式和Strategy模式有何異同

Template Method模式很容易理解,就是由基類提供一個模板,將各子類中不變的行為提取到基類中實現,而各子類中可變的行為則由各子類自己重寫基類方法實現. 
Strategy則是在使用策略模式的應用例項內部維護一個策略例項,針對不同的子類用不同的策略實現. 

來看看兩者的程式碼實現: 

Template Method模式 -- 基類 
Java程式碼  收藏程式碼
  1. package com.dzeay.pattern.template_method;  
  2. public class BaseTemplate {  
  3.     public void doSameThing() {  
  4.         System.out.println("BaseTemplate.doSameThing");  
  5.     }  
  6.     public void doOtherThing() {  
  7.         System.out.println("BaseTemplate.BaseTemplate");  
  8.     }  
  9. }  


Template Method模式 -- 子類A 
Java程式碼  收藏程式碼
  1. package com.dzeay.pattern.template_method;  
  2. public class AClass extends BaseTemplate {  
  3.     @Override  
  4.     public void doOtherThing() {  
  5.         System.out.println("AClassImpl.doOtherThing"
    );  
  6.     }  
  7. }  


Template Method模式 -- 子類B 
Java程式碼  收藏程式碼
  1. package com.dzeay.pattern.template_method;  
  2. public class BClass extends BaseTemplate {  
  3.     @Override  
  4.     public void doOtherThing() {  
  5.         System.out.println("BClassImpl.doOtherThing");  
  6.     }  
  7. }  


Template Method模式 -- 測試類 
Java程式碼  收藏程式碼
  1. package com.dzeay.pattern.template_method;  
  2. /** 
  3.  * <pre> 
  4.  * Template Method(模板方法模式)詳解:  
  5.  * 由基類提供一個模板,將各子類中不變的行為提取到基類中實現, 
  6.  * 而各子類中可變的行為由各子類自己重寫基類方法實現 
  7.  * </pre> 
  8.  *  
  9.  * @author <a href="mailto:[email protected]">dzeay.com</a> 
  10.  * @since 2010-11-15 
  11.  * @version 1.0 
  12.  */  
  13. public class TestClass {  
  14.     /** 
  15.      *  
  16.      * @param args 
  17.      */  
  18.     public static void main(String[] args) {  
  19.         BaseTemplate aClass = new AClass();  
  20.         aClass.doSameThing();  
  21.         aClass.doOtherThing();  
  22.         BaseTemplate bClass = new BClass();  
  23.         bClass.doSameThing();  
  24.         bClass.doOtherThing();  
  25.     }  
  26. }  


Strategy模式 -- 策略介面 
Java程式碼  收藏程式碼
  1. package com.dzeay.pattern.strategy;  
  2. public interface IStrategy {  
  3.     public void doOtherThing();  
  4. }  


Strategy模式 -- 策略A 
Java程式碼  收藏程式碼
  1. package com.dzeay.pattern.strategy;  
  2. public class AStrategy implements IStrategy {  
  3.     @Override  
  4.     public void doOtherThing() {  
  5.         System.out.println("AStrategy.doOtherThing");  
  6.     }  
  7. }  


Strategy模式 -- 策略B 
Java程式碼  收藏程式碼
  1. package com.dzeay.pattern.strategy;  
  2. public class BStrategy implements IStrategy {  
  3.     @Override  
  4.     public void doOtherThing() {  
  5.         System.out.println("BStrategy.doOtherThing");  
  6.     }  
  7. }  


Strategy模式 -- 應用 
Java程式碼  收藏程式碼
  1. package com.dzeay.pattern.strategy;  
  2. public class Context {  
  3.     private IStrategy strategy;  
  4.     public Context() {  
  5.     }  
  6.     public Context(IStrategy strategy) {  
  7.         this.strategy = strategy;  
  8.     }  
  9.     public void doOtherThing() {  
  10.         this.strategy.doOtherThing();  
  11.     }  
  12.     public void setStrategy(IStrategy strategy) {  
  13.         this.strategy = strategy;  
  14.     }  
  15. }  


Strategy模式 -- 測試類 
Java程式碼  收藏程式碼
  1. package com.dzeay.pattern.strategy;  
  2. /** 
  3.  * <pre> 
  4.  * Strategy(策略模式)詳解: 
  5.  * 在使用策略模式的應用例項內部維護一個strategy例項,針對不同的子類用不同的策略實現 
  6.  * </pre> 
  7.  *  
  8.  * @author <a href="mailto:[email protected]">dzeay.com</a> 
  9.  * @since 2010-11-15 
  10.  * @version 1.0 
  11.  */  
  12. public class TestClass {  
  13.     /** 
  14.      * @param args 
  15.      */  
  16.     public static void main(String[] args) {  
  17.         Context context = new Context();  
  18.         context.setStrategy(new AStrategy());  
  19.         context.doOtherThing();  
  20.         context.setStrategy(new BStrategy());  
  21.         context.doOtherThing();  
  22.         context.setStrategy(new IStrategy() {              
  23.             @Override  
  24.             public void doOtherThing() {  
  25.                 System.out.println("doOtherThing");  
  26.             }  
  27.         });  
  28.         context.doOtherThing();  
  29.     }  
  30. }  


未完待續 ........

相關推薦

Template Method模式Strategy模式異同

Template Method模式很容易理解,就是由基類提供一個模板,將各子類中不變的行為提取到基類中實現,而各子類中可變的行為則由各子類自己重寫基類方法實現.  Strategy則是在使用策略模式的應用例項內部維護一個策略例項,針對不同的子類用不同的策略實現.  來看看兩者的程式碼實現:  Templat

Template Method模式Strategy模式:繼承與委託

Themeplate Method public abstract class Application { protected abstract void init(); protected abstract void idle(); protected abstra

java異常處理 Exception、error、執行時異常一般異常異同

一、開場白 對於程式執行過程中的可能出現異常情況,java語言使用一種稱為異常處理的錯誤捕捉機制進行處理。相信大家對 try { }catch( ){} finally{} 這種結構非常熟悉,使用頻率極高。既然經常使用它,而且也是面試常問知識點,我們就有必要去

Template Method模式Strategy模式的理解

/** * Strategu模式,把公用方法抽象成介面 * @author paul * @date 2006-8-9 */publicabstractclass Beverage {    /**     * 業務邏輯的實現,final確保不被子類 改變     * prepareRecipe void  

Template Method - 模板方法模式

本文介紹設計模式中的模板方法(Template Method)模式的概念,用法,以及實際應用中怎麼樣使用Template Method模式進行開發。Template Method模式的概念 Template Method模式正如其名,在作為抽象類的父類裡,定義了一個具有固定演算法並可以細分為多個步驟的模板方法

設計模式Template Method - 模板方法模式

本文介紹設計模式中的模板方法(Template Method)模式的概念,用法,以及實際應用中怎麼樣使用Template Method模式進行開發。Template Method模式的概念 Template Method模式正如其名,在作為抽象類的父類裡,定義了一個具有固定演算法並可以細分為多個步驟的模板方法

java常用的的設計模式開發模式哪些

設計模式是不分語言的;前輩們總結出來的設計模式分:3種類型及23種模式:設計模式主要分三個型別:建立型、結構型和行為型。 其中建立型有: 一、Singleton,單例模式:保證一個類只有一個例項,並提供一個訪問它的全域性訪問點 二、Abstract Factory,抽象工廠

設計模式19:Template Method Pattern (模板方法模式)

Define:Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine c

java常用的設計模式開發模式哪些

一、設計模式的分類 設計模式是不分語言的;前輩們總結出來的設計模式分:3種類型及23種模式:設計模式主要分三個型別:建立型、結構型和行為型。 其中建立型有:一、Singleton,單例模式:保證一個類只有一個例項,並提供一個訪問它的全域性訪問點二、Abstract Fact

設計模式--Template模式 VS Strategy模式

Template 模式和Strategy模式所要解決的問題類似,而且通常可以互換使用。 Template模式使用繼承來解決問題。 Strategy模式使用委託來解決問題。 如圖1:template 模式:基類 BubbleSorter實現了通用演算法sort, IntBu

代理模式 策略模式 看似相似,什麼不同

代理模式在使用的時候,使用的物件我們並不關係被代理者。 策略模式在使用的時候,我們使用的時候其實我們是知道指定的執行者。 如下 (注意傳參) 代理模式 Assist assist = new A

交給子類: Template Method(模板方法模式)【PHP】

pri align 子類 特定 itl area 圖結構 -a abs Template Method(模板方法模式) ---- 將具體處理交給子類 Template Method 就是定義一個操作中的算法骨架,而將一些步驟延遲到子類中,使得子類可以不改變一個算法

設計模式之策略模式狀態模式strategy pattern & state pattern)

本文來講解一下兩個結構比較相似的行為設計模式:策略模式和狀態模式。兩者單獨的理解和學習都是比較直觀簡單的,但是實際使用的時候卻並不好實踐,算是易學難用的設計模式吧。這也是把兩者放在一起介紹的原因,經過對比和例項介紹,相信應該會一些比較深刻的感知。最後在結合個人的體會簡單聊一下對這兩個模式的一些看法。 1.

[CentOS 7系列]忘記密碼的“救星”——單用戶模式救援模式

linux 操作系統 用戶 system 忘記密碼 init是Linux系統操作中不可缺少的程序之一。 是一個由內核啟動的用戶級進程。 內核啟動(已經被載入內存,開始運行,並已初始化所有的設備驅動程序和數據結構等)之後,就通過啟動一個用戶級程序init的方式來啟動其他用戶級的進程或服務。所

使用Xcode-debug模式release模式

哪裏 eas containe cin white ces item proc mman 在開發過程中,我們常常須要用到NSLog輸出一些信息,甚至有的開發過程。必須在控制臺查看輸出,有經驗的程序猿通過控制臺輸出就能知道整個數據交互的一個流程。可是一個

su su - 命令不同

本質 tro shel 最大的 錯誤 path環境變量 命令 su - pwd su命令和su -命令最大的本質區別就是:前者只是切換了root身份,但Shell環境仍然是普通用戶的Shell;而後者連用戶和Shell環境一起切換成root身份了。只有切換了Shell環境才

activeMQ隊列模式主題模式的Java實現

ons javax try nfa port 實現 catch n) tac 一、隊列模式 生產者 import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Dest

單例模式工廠模式

必須 order pac border 聲明 並且 span lin 實例對象 PHP------單例模式和工廠模式

【轉】FTP主動模式被動模式的比較

edit 兩個 int cti 了解 選擇 監聽端口 通訊 mod 總是記不住FTP主動和被動模式的區別。放在這裏,以備日後查閱。 FTP是僅基於TCP的服務,不支持UDP。與眾不同的是FTP使用2個端口,一個數據端口和一個命令端口(也可叫做控制端口)。通常來說這兩個端

模式保護模式區別及尋址方式

解釋 src 需求 範圍 上線 二進制表示 工作 菜鳥 相對 轉載自:http://blog.csdn.net/rosetta 64KB-4GB-64TB? 我記得大學的匯編課程、組成原理課裏老師講過實模式和保護模式的區別,在很多書本上也有談及,無奈本人理解和感悟能