1. 程式人生 > >JAVA的23種設計模式---模板模式

JAVA的23種設計模式---模板模式

概要:

該文章參考了《設計模式之禪》一書及一些前輩的部落格文章

1.該文章闡述了模板模式的原理及展示了模板模式的示例;
2.該文章適合初學設計模式的技術人員研習;
3.該文章有許多不足之處,請各位大咖指正,噴子繞道;

正文:

模板模式:定義一個操作中的演算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。

1.模板模式程式碼示例

抽象交易流程

/**
 * 交易流程
 * @author Administrator
 *
 */
public abstract class TransactionProcess {
    //開始
public abstract void start(); //競價 public abstract void Bidding(); //交易 public abstract void transaction(); //結束 public abstract void over(); //整個過程,模板模式核心所在 public void process(){ //開始 this.start(); //是否競價,鉤子方法 if(this.isBidding()){ this
.Bidding(); } //交易 this.transaction(); //結束 this.over(); } //判斷過程中是否需要競價,預設需要 public boolean isBidding(){ return true; } }

普通買賣交易方式

/**
 * 普通買賣,使用者決定是否需要競價這個環節
 * @author Administrator
 *
 */
public class GeneralTransaction extends TransactionProcess
{
//用於傳遞使用者是否需要競價的這個引數 private boolean biddingFlag = true; @Override public void start() { System.out.println("普通買賣:開始..."); } @Override public void Bidding() { System.out.println("普通買賣:競價..."); } @Override public void transaction() { System.out.println("普通買賣:交易..."); } @Override public void over() { System.out.println("普通買賣:結束..."); } //重寫是否需要競價的方法,由使用者決定 @Override public boolean isBidding(){ return this.biddingFlag; } //使用者傳入普通買賣是否需要競價 public void setBidding(boolean isBidding){ biddingFlag = isBidding; } }

拍賣交易方式

/**
 * 拍賣,肯定需要競價,此處是否需要競價這個環節的方法無需重寫
 * @author Administrator
 *
 */
public class Auction extends TransactionProcess{

    @Override
    public void start() {
        System.out.println("拍賣:開始...");
    }

    @Override
    public void Bidding() {
        System.out.println("拍賣:競價...");
    }

    @Override
    public void transaction() {
        System.out.println("拍賣:交易...");
    }

    @Override
    public void over() {
        System.out.println("拍賣:結束...");
    }

}

模擬交易過程

/**
 * 模擬交易過程
 * @author Administrator
 *
 */
public class Test {

    public static void main(String[] args) {
        /**
         * 模擬普通交易,設定為不需要競價環節,如需要競價,false改為true
         */     
        GeneralTransaction generalTransaction = new GeneralTransaction();
        generalTransaction.setBidding(false);
        /*輸出
        普通買賣:開始...
        普通買賣:交易...
        普通買賣:結束...*/        
        generalTransaction.process();

        /**
         * 模擬拍賣,需要競價
         */
        Auction auction = new Auction();
        /*輸出
        拍賣:開始...
        拍賣:競價...
        拍賣:交易...
        拍賣:結束...*/  
        auction.process();      
    }   
}

注:
1.此示例中,交易流程的結構是已經封裝好的,但是普通買賣和拍賣在是否需要競價環節這個問題上有差異,因此此處普通買賣方式在不改變整體架構的前提條件下對競價這個特定步驟進行了取捨。
2.鉤子方法:不破壞整體架構的前提下,隨著外界條件改變,可以影響到模板方法的執行的方法。

相關推薦

Java23設計模式【19】----》模板方法模式(template method)

一、場景 流程骨架清楚,但具體實現還不清楚 如吃飯,吃飯流程都知道,但具體吃什麼飯不清楚 二、模板方法模式介紹 定義好骨架,但具體某個方法該怎麼調不知道 三、核心 四、方法回撥(鉤子方法) 五、什麼時候用模板方法模式 六、開發中的場景 七

java23設計模式3(轉)

訂閱 esp 兩個類 叠代器 請求 是個 plus 集合類 統一 本章是關於設計模式的最後一講,會講到第三種設計模式——行為型模式,共11種:策略模式、模板方法模式、觀察者模式、叠代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式。

java23設計模式2(轉)

是把 希望 sources 23種設計模式 接口 聯系 適合 () 創建 我們接著討論設計模式,上篇文章我講完了5種創建型模式,這章開始,我將講下7種結構型模式:適配器模式、裝飾模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。其中對象的適配器模式是各種模式的起源,我

Java23設計模式

生產 抽象工廠模式 com void 適配 依賴倒轉 mman rgs ati 一、設計模式的分類 分類 設計模式 創建型 工廠方法模式(Factory Method)、抽象工廠模式(Abstract Factory)、建造者模式(Builder)、原型模式(P

JAVA23設計模式六大原則,資料結構演算法強化訓練

目錄: 設計模式六大原則(1):單一職責原則 設計模式六大原則(2):里氏替換原則 設計模式六大原則(3):依賴倒置原則 設計模式六大原則(4):介面隔離原則 設計模式六大原則(5):迪米特法則 設計模式六大原則(6):開閉原則 設計模式六大原則(1):單一職責原則 定義:不要存在多於一個導致

java23設計模式之代理模式

什麼是代理?   簡單的來說就把通過第三方來完成一件事。 代理分為: 1.靜態代理     2.動態代理 1.靜態代理  * 1.定義抽象行為的類【抽象類、介面】  * 2.定義具體的實現類實現抽象方法  * 3.定

java23設計模式之策略設計模式

何為策略設計模式? 將可變的部分抽象為介面,在該介面的實現類裡面實現抽象的具體演算法,並使他們可以相互轉換。 策略設計模式的優點? 策略設計模式將普通的判斷語句的抽象出來,如果後續還有其他情況那麼是需要再加一個實現類就可以了,不會影響其他已經編譯的檔案。說白了就是擴充套件性很好,提高

java23設計模式之建立型設計模式(5

 23種設計模式可以分為三類:建立型模式、結構性設計模式、行為型設計模式。 本文將會從淺至深的講解建立型設計模式。 建立型設計模式有: AbstractFactory ( 抽象工廠 ) FactoryMethod ( 工廠方法 ) Singleton ( 單態模式 ) Builde

java23設計模式-訪問者模式

定義 封裝一些作用於某種資料結構中各元素的操作,它可以在不改變這個資料結構的前提下定義作用於這些元素的新的操作。 UML 角色 Visitor : 抽象訪問者介面 Element : 被訪問元素介面 ElementA,Element

java23設計模式-中介者模式

定義 用一箇中介物件來封裝一系列的物件互動,中介者使各物件不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立地改變它們之間的互動。 角色 Colleague:是一個抽象類或者介面,提供和其他Colleague通訊的方法 notify(String nam

java23設計模式-直譯器模式

定義 給定一個語言,定義它的文法表示,並定義一個直譯器,這個直譯器使用該標識來解釋語言中的句子 UML 角色 抽象表示式(Expression):宣告一個所有的具體表達式角色都需要實現的抽象介面。該介面提供一個interpret()方法。 終結符表

java23設計模式-介面卡模式

定義 介面卡模式是把一個類的介面轉換成客戶所期望的另一種介面,從而使原本不匹配而無法在一起工作的兩個類可以一起工作。 UML 角色 Target: 符合客戶端期望的介面。 Adaptee: 需要被適配的類。此類包含了客戶端想要實現的大部分功能,但並不能完

java23設計模式-門面(外觀)模式

定義 外觀模式為子系統的一組介面提供一個一致的介面,此模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。 UML 角色 子系統(SubSystem): 表示一個系統的子系統或者模組 門面(Facade): 客戶端通過門面間接控制子系統。門面遮蔽

java23設計模式-代理模式

定義 為其他物件提供一種代理以控制對這個物件的訪問。在某些情況下,一個物件不適合或者不能直接引用另一個物件,而代理物件可以在客戶端和目標物件之間起到中介的作用。 UML 角色 Target: 被代理類的介面。 TargetImpl: 被代理類的實現。 T

java23設計模式-組合器模式

定義 將物件組合成樹形結構以表示“部分整體”的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。–GoF《設計模式》 UML 角色 Component: 組合中的物件宣告介面,在適當的情況下,實現所有類共有介面的預設行為。宣告一個介面用於

Java23設計模式之:策略模式和工廠模式

因為目前產品用到了策略模式,比如國內的使用者註冊走A流程,美國使用者走B流程,印度使用者走C流程,每個流程有些相同,有些則完全不一樣。 這兩種設計模式非常容易弄混淆。   策略模式和工廠模式: 1. 關注點不一樣,工廠模式關注物件建立,策略模式關注行為封裝 2.解決的問題不

Java23設計模式【1】----》單例模式

23種模式分類: 模式:固定的套路 面向物件重要的模式 一、原理 保證一個類只有一個物件,並且提供一個全域性的訪問點 二、應用場景 三、優點 記憶體佔用小  四、最好擁有的特點 執行緒安全,呼叫效率高,懶載入----》推薦使用靜態內部類實現 五、常

java23設計模式教程

一、設計模式的分類 總體來說設計模式分為三大類: 建立型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。 結構型模式,共七種:介面卡模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。 行為型模式,共十一種:策略模式、模板方法模

Java23設計模式【10】----》外觀模式

一、迪米特法則(最少知識原則) 如泡茶:不需要親自和開水茶葉打交道,而是和茶館服務員打交道。  二、原理 封裝;儘可能少的和子系統打交道,而是和一個統一的出口打交道;把功能封裝起來,調起來方便;  三、開發中的場景

Java23設計模式【前言】--總體說明

23種模式分類: 模式:固定的套路 一、建立型模式 一句話總結:幫我們建立物件 建立型模式中的重點模式:單例模式,簡單工廠模式,原型模式 二、結構型模式 對程式的整體結構起到更大的作用,幫助我們實現程式的鬆耦合,對程式的維護和升級起到很大的作用,有利於