設計模式 7 模板方法模式

2021-08-09 03:15:56 字數 1863 閱讀 2608

兩個人要做兩張相同的試卷試卷,初步**:

public class main 

}class test*****a

public void question_two()

public void question_three()

}class test*****b

public void question_two()

public void question_three()

}

執行結果:

1. how many chicken in this picture? ()

answer:5

2. 3+5=? ()

answer:8

3. 3+5+0-5=? ()

answer:3

1. how many chicken in this picture? ()

answer:4

2. 3+5=? ()

answer:8

3. 3+5+0-5=? ()

answer:0

上面**的不足顯而易見:除了答案不一樣外test*****a和test*****b的問題都是一樣的,因此可以做一下優化,把相同的部分提取出來整合成父類,讓子類繼承:

public class main 

}abstract class test*****

public void question_two()

public void question_three()

}class test*****a extends test*****

@override

public void question_two()

@override

public void question_three()

}class test*****b extends test*****

@override

public void question_two()

@override

public void question_three()

}

這樣,重複的內容就上公升到了父類去了,子類就不需要做重複的內容了。

還有乙個重複的地方,就是"answer:",可以用模板方法模式解決這個問題:

public class main 

}abstract class test*****

public void question_two()

public void question_three()

abstract int answer_one();

abstract int answer_two();

abstract int answer_three();

}class test*****a extends test*****

@override

public int answer_two()

@override

public int answer_three()

}class test*****b extends test*****

@override

public int answer_two()

@override

public int answer_three()

}

上面我通過子類重寫父類的3個answer抽象方法來實現去重

模板方法模式就是把重複的行為搬到單一的地方,這樣就可以幫助子類擺脫重複的不變行為的糾纏

模板設計模式 設計模式 模板方法模式

在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。首先需要一定抽象的定義,沒有具體的實現,但是在抽象類的行為中,子類去程序這個抽象類,重寫抽象方法,實現不...

設計模式 模板方法設計模式

物件導向,萬物皆物件,用乙個雷來反應現實生活中的東西。比如銀行系統,業務公升級 活期 定期,差別很小,就加判斷 違背單一職責 差別比較多,尤其是模擬較複雜,型別拆分下。拆分之後,自然就有父類,重用。利率 每個客戶端都有利率,但是各不一樣 抽象方法。show 不分客戶端是一樣的,個別客戶端是不一樣的 ...

設計模式 模板方法模式

模板方法模式 類庫中大量使用,例如idbconnection介面 dbconnection抽象類 派生的sqlconnection和派生的oledbconnection就是使用了這種方法 1。介面,到能做的定義進來。一種規範 2.把共同的部分進去分離出來,放到乙個抽象的父類去實現.3.子類中實現 不...