設計模式(4) 模板方法模式

2022-09-17 22:57:19 字數 2445 閱讀 4008

模板方法模式:

定義:定義乙個操作中的演算法框架,而將一些步驟延遲到子類中。

使得子類能夠不改變乙個演算法的結構就可以重定義該演算法的某些特定步驟。

模板方法模式很easy,只使用了j**a的繼承機制,但它是乙個應用很廣泛的模式。

在軟體開發project中,假設同樣一段**複製過兩次,就須要對設計產生懷疑。架構師要明白地說明為什麼同樣的邏輯要出現兩次或很多其它次。

模板方法模式的長處:

封裝不變。擴充套件可變部分

提取公共部分**。便於維護

行為有父類控制,子類實現。

缺點:子類對父類產生了影響。

生產悍馬車輛模型:

類圖:

悍馬車有兩個型號:h1和h2。

抽象悍馬介面:

abstract class hummermodel
兩種型別的悍馬:

// h1悍馬模型

class hummerh1model extends hummermodel

public void stop()

public void alarm()

public void engineboom()

public void run()

}// h2型別

class hummerh2model extends hummermodel

public void stop()

public void alarm()

public void engineboom()

public void run()

}

兩個實現類中run方法中的**是同樣的,這個run方法的實現應該在抽象類中,而不是在實現類中。

改動之後是這種:

abstract class hummermodel 

}// h1悍馬模型

class hummerh1model extends hummermodel

public void stop()

public void alarm()

public void engineboom()

}// h2型別

class hummerh2model extends hummermodel

public void stop()

public void alarm()

public void engineboom()

}

這時抽象類hummermodel類中的run方法叫做模板方法,其它的方法叫做基本方法。模板方法實現對基本方法的排程。完畢固定的業務邏輯。

場景類:

public class client 

}

抽象模板類中的基本方法盡量設計為protected型別。符合迪公尺特法則,實現類若非必要盡量不要擴大父類中的訪問許可權。

模板方法模式的擴充套件:

h1型號的悍馬喇叭想讓它響就響,h2型號的喇叭不要有聲音。

在抽象類中新增乙個實現方法isalarm,有各個類覆寫該方法。

abstract class hummermodel 

// 停車

this.stop();

} // 鉤子方法,預設喇叭是會響的

protected boolean isalarm()

}// h1悍馬模型

class hummerh1model extends hummermodel

protected void stop()

protected void alarm()

protected void engineboom()

protected boolean isalarm()

public void setalarm(boolean alarmflag)

}// h2型別

class hummerh2model extends hummermodel

protected void stop()

protected void alarm()

protected void engineboom()

protected boolean isalarm()

}

場景類:

public class client 

h1.run();

system.out.println("-------h2型號的悍馬----");

hummermodel h2 = new hummerh2model();

h2.run();

}}

使用者能夠控制h1型號的車的喇叭。外界條件改變,影響到了模板方法的執行。

抽象類中的isalarm方法叫做鉤子方法。

有鉤子方法的模板方法模式才算完美。

C 設計模式(4) 模板方法模式

在程式開發中,經常會遇到這種情況 某個方法要實現的演算法需要多個步驟,但其中有一些步驟是固定不變的,而另一些步驟則是不固定的。為了提高 的可擴充套件性和可維護性,模板方法模式在這種場景下就派上了用場。定義乙個操作中演算法的框架,而將一些步驟延遲到子類中。模板方法模式使得子類可以不改變乙個演算法的結構...

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

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

設計模式 c 版(4) 模板方法模式

定義 定義乙個操作中的演算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。abstractclass 叫抽象模板,他的方法分為兩類 基本方法 即基本操作,是由子類實現的方法,並且在模板方法被呼叫。模板方法 可以有乙個或幾個,一般是乙個具體方法,...