首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

設計模式重構實戰:Template Method 模式在 SEO 群發系統中的應用

     編輯:Java 相關知識

Template Method(模板方法)模式定義演算法骨架,將可變步驟延遲到子類實現。適用於:流程固定但細節多變、存在多個相似場景的場合。本文以 SEO 群發專案為例,展示如何用此模式消除重複代碼、提升擴展性。

專案背景與挑戰

系統需對多個論壇站點進行群發帖、群回覆以增加外鏈。站點數量未來不可預知,每個站點的發帖細節(HTTP 參數、表單欄位、驗證碼處理等)各不相同,但整體流程高度一致:

  1. 群登錄(隨機代理 IP)
  2. 針對每個版面,隨機選取帳號與內容提交

介面設計

public interface ISitePost {
    boolean postAll(List<Siteboards> boards, List<Siteusers> users, List<Postinfos> posts);
    boolean replyAll(List<Articleinfos> articles, List<Siteusers> users, List<Postinfos> posts);
}

抽象類實現模板方法

public abstract class AbstractSitePost implements ISitePost {
    // 模板方法:定義固定流程
    public boolean postAll(List<Siteboards> boards, List<Siteusers> users, List<Postinfos> posts) {
        // 1. 群登錄
        loginAll(users);
        // 2. 遍歷版面發帖
        for (Siteboards board : boards) {
            Siteusers user = selectRandomUser(users);
            Postinfos post = selectRandomPost(posts);
            String result = post(user, board, post); // 交給子類實現
            if (!isSuccess(result)) return false;
        }
        return true;
    }

    // 抽象方法:子類必須實現的站點特有發帖邏輯
    protected abstract String post(Siteusers user, Siteboards board, Postinfos post);

    // 共用輔助方法
    private void loginAll(List<Siteusers> users) { ... }
    private Siteusers selectRandomUser(List<Siteusers> users) { ... }
    private boolean isSuccess(String result) { ... }
}

具體站點實現

新增站點只需繼承 AbstractSitePost 並實作 post():

public class AAASitePost extends AbstractSitePost {
    protected String post(Siteusers user, Siteboards board, Postinfos post) {
        // AAA 站點專屬:構造 multipart/form-data、處理驗證碼、提交...
        return httpClient.execute(postMethod);
    }
}

重構效益

  • 消除重複:登錄、隨機選取、流程控制集中在父類
  • 開放封閉:新增站點零修改現有代碼,只需新增子類
  • 測試友好:可針對模板方法與具體實現分別編寫單元測試

UML 結構

Template Method UML

(版權所有 hankchen)

適用場景檢核表

  • ✅ 具備統一操作步驟
  • ✅ 擁有不同操作細節
  • ✅ 存在多個相同流程但細節不同的場景

Template Method 讓「變與不變」清晰分離,是框架設計與業務流程標準化的利器。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved