程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#設計模式——策略模式(Strategy Pattern)

C#設計模式——策略模式(Strategy Pattern)

編輯:C#入門知識

 

一、概述
我們來實現一個企業的工資系統,該企業中不同級別的員工工資算法都不相同,針對該問題,最容易想到的莫過於在代碼中堆積一大堆if…else…語句或者是switch…case…語句。如果該企業中不同級別的員工過多,或是對級別的調整比較頻繁,那該系統就會顯得復雜而脆弱。如何能將對象和算法解耦,從而使得在系統運行時能透明的改變對象的算法呢?這就到了策略模式大顯身手的時候了。
二、策略模式
策略模式定義了一系列算法,把它們一個個封裝起來,並且使它們可相互替換。該模式可使得算法能獨立於使用它的客戶而變化。
策略模式的結構圖如下:

\

Context代表需要改變算法的那個對象,它維護了一個對Strategy對象的引用,可以定義一個接口允許Strategy對象來訪問它的數據。
Strategy定義了所支持算法的公共接口,Context通過這個接口來調用ConcreteStrategy定義的算法。
ConcreteStrategy實現了具體的算法。
三、示例

 

 

下面我們使用策略模式來實現本文開頭提到的企業工資系統。

首先定義算法的公共接口

 

1     public interface Salary

2     {

3         int Caculator();

4     }

接著實現具體的算法

 

 1     public class ManagerSalary : Salary

 2     {

 3         public int Caculator()

 4         {

 5             return 1000;

 6         }

 7     }

 8

 9     public class EmployeeSalary : Salary

10     {

11         public int Caculator()

12         {

13             return 800;

14         }

15     }

然後定義那個需要動態改變算法的對象

 

 1     public class Employee

 2     {

 3         public Salary Salary {get;set;}

 4         public Employee(Salary salary)

 5         {

 6             Salary = salary;

 7         }

 8         public int GetSalary()

 9         {

10             return Salary.Caculator();

11         }

12     }

最後看一下如何調用

 

1     static void Main(string[] args)

2     {

3         Employee employee = new Employee(new EmployeeSalary());

4         Console.WriteLine("Employee salary is:{0}", employee.GetSalary().ToString());

5         employee.Salary = new ManagerSalary();

6         Console.WriteLine("Employee salary is:{0}", employee.GetSalary().ToString());

7

8         Console.ReadLine();

9     }

 

摘自 saville

<script></script>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved