/**
* 模版方法
* 模板方法(Template Method)模式的定義如下:定義一個操作中的算法骨架未舟,而將算法的一些步驟延遲到子類中奄容,使得子類可以不改變該算法結(jié)構(gòu)的情況下重定義該算法的某些特定步驟。
* 它是一種類行為型模式贰健。
* <p>
* 優(yōu)點
* 1.它封裝了不變部分,擴展可變部分恬汁。它把認為是不變部分的算法封裝到父類中實現(xiàn)伶椿,而把可變部分算法由子類繼承實現(xiàn),便于子類繼續(xù)擴展氓侧。
* 2.它在父類中提取了公共的部分代碼脊另,便于代碼復用。
* 3.部分方法是由子類實現(xiàn)的约巷,因此子類可以通過擴展方式增加相應(yīng)的功能偎痛,符合開閉原則。
* <p>
* 缺點
* 1.對每個不同的實現(xiàn)都需要定義一個子類载庭,這會導致類的個數(shù)增加看彼,系統(tǒng)更加龐大廊佩,設(shè)計也更加抽象,間接地增加了系統(tǒng)實現(xiàn)的復雜度靖榕。
* 2.父類中的抽象方法由子類實現(xiàn)标锄,子類執(zhí)行的結(jié)果會影響父類的結(jié)果,這導致一種反向的控制結(jié)構(gòu)茁计,它提高了代碼閱讀的難度料皇。
* 3.由于繼承關(guān)系自身的缺點,如果父類添加新的抽象方法星压,則所有子類都要改一遍践剂。
*/
public class TemplateTest {
public static void main(String[] args) {
ShareTemplate weChatShare = new WeChatShare();
weChatShare.share("標題", "內(nèi)容");
ShareTemplate facebookShare = new FacebookShare();
facebookShare.share("標題", "內(nèi)容");
}
}
/**
* 分享模版
*/
public abstract class ShareTemplate {
final void share(String title, String content) {
login();
share();
shareSuccess();
}
private void login() {
// 一些登錄的操作
}
private void shareSuccess() {
// 一些分享成功后的操作
}
abstract protected void share();
}
/**
* 微信分享
*/
public class WeChatShare extends ShareTemplate {
@Override
protected void share() {
// 調(diào)用微信分享
}
}
/**
* Facebook分享
*/
public class FacebookShare extends ShareTemplate {
@Override
protected void share() {
// 調(diào)用Facebook分享
}
}