1. 程式人生 > >設計模式之模式方法模式

設計模式之模式方法模式

ram crypt 模板方法 blog log quest void 客戶端使用 分享

模式方法模式類圖:

技術分享

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

模板方法模式要註意:

1. 為了可以讓模板方法pay 能夠讓客戶端使用,訪問級別為public, 而其他方法的訪問設置為protected,客戶端不能使用。

這裏我們假設,向第三方支付發起請求的過程一致,分別為:構造請求參數 ,排序,加密。

 /// <summary>
    /// 付款 抽象類
    /// </summary>
    public abstract class AbstractPayment
    {
        
/// <summary> /// 第一步:設計請求參數 /// </summary> protected abstract void Request(); /// <summary> /// 第二步:排序 /// </summary> protected abstract void Sort(); /// <summary> /// 第三步:加密碼 /// </summary> protected abstract
void Encrypt(); /// <summary> /// 模板方法:付款 /// </summary> public void Pay() { Request(); Sort(); Encrypt(); Console.WriteLine("付款請求已發送"); } } public class AliPayment : AbstractPayment {
protected override void Encrypt() { Console.WriteLine("AliPay 請求加密 "); } protected override void Request() { Console.WriteLine("AliPay 構造請求參數 "); } protected override void Sort() { Console.WriteLine("AliPay 參數排序 "); } } public class WeiXinPay : AbstractPayment { protected override void Encrypt() { Console.WriteLine("WeiXinPay 參數加密"); } protected override void Request() { Console.WriteLine("WeiXinPay 構造請求參數"); } protected override void Sort() { Console.WriteLine("WeiXinPay 參數排序"); } } class Program { static void Main(string[] args) { Console.OutputEncoding = Encoding.UTF8; AbstractPayment aliPay = new AliPayment(); aliPay.Pay(); Console.WriteLine("-----------------分界線------------------"); AbstractPayment weixinPay = new WeiXinPay(); weixinPay.Pay(); Console.ReadKey(); } }

設計模式之模式方法模式