<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 模板方法模式深度解析(二) 3 模板方法模式應用實例 下面通過一個應用實例來進一步學習和理解模板方法模式。 1. 實例說明 某軟件公司欲為某銀行的業務支撐系統開發一個利息計算模塊,利息計算流程如下: (1) 系統根據賬號和密碼驗證用戶信息,如果用戶信息錯誤,系統顯示出錯提示; (2) 如果用戶信息正確,則根據用戶類型的不同使用不同的利息計算公式計算利息(如活期賬戶和定期賬戶具有不同的利息計算公式); (3) 系統顯示利息。 試使用模板方法模式設計該利息計算模塊。 2. 實例類圖 通過分析,本實例結構圖如圖3所示。 ![](http://img.my.csdn.net/uploads/201212/15/1355577976_2992.jpg) 圖3 銀行利息計算模塊結構圖 在圖3中,Account充當抽象類角色,CurrentAccount和SavingAccount充當具體子類角色。 3. 實例代碼 (1) Account:賬戶類,充當抽象類。 ``` //Account.cs using System; namespace TemplateMethodSample { abstract class Account { //基本方法——具體方法 public bool Validate(string account, string password) { Console.WriteLine("賬號:{0}", account); Console.WriteLine("密碼:{0}", password); //模擬登錄 if (account.Equals("張無忌") && password.Equals("123456")) { return true; } else { return false; } } //基本方法——抽象方法 public abstract void CalculateInterest(); //基本方法——具體方法 public void Display() { Console.WriteLine("顯示利息!"); } //模板方法 public void Handle(string account, string password) { if (!Validate(account,password)) { Console.WriteLine("賬戶或密碼錯誤!"); return; } CalculateInterest(); Display(); } } } ``` (2) CurrentAccount:活期賬戶類,充當具體子類。 ``` //CurrentAccount.cs using System; namespace TemplateMethodSample { class CurrentAccount : Account { //覆蓋父類的抽象基本方法 public override void CalculateInterest() { Console.WriteLine("按活期利率計算利息!"); } } } ``` (3) SavingAccount:定期賬戶類,充當具體子類。 ``` //SavingAccount.cs using System; namespace TemplateMethodSample { class SavingAccount : Account { //覆蓋父類的抽象基本方法 public override void CalculateInterest() { Console.WriteLine("按定期利率計算利息!"); } } } ``` (4) 配置文件App.config,在配置文件中存儲了具體子類的類名。 ``` <?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="subClass" value="TemplateMethodSample.CurrentAccount"/> </appSettings> </configuration> ``` (5) Program:客戶端測試類 ``` //Program.cs using System; using System.Configuration; using System.Reflection; namespace TemplateMethodSample { class Program { static void Main(string[] args) { Account account; //讀取配置文件 string subClassStr = ConfigurationManager.AppSettings["subClass"]; //反射生成對象 account = (Account)Assembly.Load("TemplateMethodSample").CreateInstance(subClassStr); account.Handle("張無忌", "123456"); Console.Read(); } } } ``` 4. 結果及分析 編譯并運行程序,輸出結果如下: ``` 賬號:張無忌 密碼:123456 按活期利率計算利息! 顯示利息! ``` 如果需要更換具體子類,無須修改源代碼,只需修改配置文件App.config,例如將活期賬戶(CurrentAccount)改為定期賬戶(Saving Account),只需將存儲在配置文件中的具體子類CurrentAccount改為SavingAccount,如下代碼所示: ``` <?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="subClass" value="TemplateMethodSample.SavingAccount"/> </appSettings> </configuration> ``` 重新運行客戶端程序,輸出結果如下: ``` 賬號:張無忌 密碼:123456 按定期利率計算利息! 顯示利息! ``` > 如果需要增加新的具體子類(新的賬戶類型),原有代碼均無須修改,完全符合開閉原則。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看