策略模式 极其简单的列子
第一篇博客
本文來自 自己老師 的博客 http://blog.csdn.net/lovelion/article/details/7818983
題目:某軟件公司為某電影院開發(fā)了一套影院售票系統(tǒng),在該系統(tǒng)中需要為不同類型的用戶提供不同的電影票打折方式,具體打折方案如下:
????? (1) 學(xué)生憑學(xué)生證可享受票價8折優(yōu)惠;
????? (2) 年齡在10周歲及以下的兒童可享受每張票減免10元的優(yōu)惠(原始票價需大于等于20元);
????? (3) 影院VIP用戶除享受票價半價優(yōu)惠外還可進行積分,積分累計到一定額度可換取電影院贈送的獎品。
????? 該系統(tǒng)在將來可能還要根據(jù)需要引入新的打折方式
1.要滿足開閉原則 二話不說先定義抽象類或接口
namespace StrategyTest {/// <summary>/// 抽象策略類 (折扣類)/// </summary>public interface IAbsStrategy{/// <summary>/// 打折 抽象方法(用拼音。。)/// </summary>/// <param name="price">價格</param>/// <returns>double</returns>double DaZhe(double price);} }
2.年齡在十歲以下-10元
namespace StrategyTest {public class ChildrenDaZhe:IAbsStrategy{/// <summary>/// 兒童減10元/// </summary>/// <param name="price"></param>/// <returns></returns>public double DaZhe(double price){Console.Write("兒童價:");return price - 10;}} }
3.學(xué)生打八折
namespace StrategyTest {public class StudentDaZhe:IAbsStrategy{/// <summary>/// 學(xué)生8折/// </summary>/// <param name="price"></param>/// <returns></returns>public double DaZhe(double price){Console.Write("學(xué)生價:");return price * 0.8;}} }
4.VIP打5折
namespace StrategyTest {public class VIPDaZhe:IAbsStrategy{/// <summary>/// VIP打5折 積分增加/// </summary>/// <param name="price"></param>/// <returns></returns>public double DaZhe(double price){Console.Write("VIP價格:");Console.Write("積分增加 +1 \r\n");//積分這里意思一下。。。return price * 0.5;}} }
?
namespace StrategyTest {/// <summary>/// 電影票 環(huán)境類/// 提供兩個注入方法(注入為抽象類) 1.構(gòu)造函數(shù)注入 2.方法注入/// </summary>public class MovieTicket{private IAbsStrategy abs;//抽象打折private double price;//價格public MovieTicket(){}//構(gòu)造注入public MovieTicket(IAbsStrategy abs){this.abs = abs;}public double Price{get { return price; }set { price = value; }}//方法注入public void SetStrategy(IAbsStrategy myAbs){this.abs = myAbs;}/// <summary>/// 獲取打折后的價格/// </summary>/// <returns></returns>public double GetPrice(){return abs.DaZhe(price);}} }
?
<?xml version="1.0" encoding="utf-8" ?> <configuration><appSettings><add key="Srtiategy" value="StrategyTest.ChildrenDaZhe"></add></appSettings> </configuration>
?
?
namespace StrategyTest {class Program{static void Main(string[] args){string txt = ConfigurationManager.AppSettings["Srtiategy"].ToString();//讀取配置文件IAbsStrategy abs = Assembly.Load("StrategyTest").CreateInstance(txt) as IAbsStrategy;//創(chuàng)建實例 MovieTicket move = new MovieTicket(abs);//電影票類 環(huán)境類(構(gòu)造注入)move.Price = 30;//設(shè)置原始價格//move.SetStrategy(abs);//方法注入double myPrice= move.GetPrice();//獲取價格Console.Write("原始價為:"+move.Price);Console.Write("打完折為:" + myPrice);Console.Read();}} }
結(jié)果: 兒童價: 原始價為:30打完折為:20
如果需要修改為VIP打折? 則在配置文件中修改
這是我的第一篇文章,說實話沒什么技術(shù)含量,寫的也很爛。。。。,設(shè)計模式挺重要的,所以現(xiàn)在復(fù)習(xí)下,馬上畢業(yè)了,希望能有個好的開始,
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/StoneSH/archive/2013/04/04/2999422.html
總結(jié)
以上是生活随笔為你收集整理的策略模式 极其简单的列子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个姓林好听的女孩名字!
- 下一篇: ubuntu chm文档阅读器