第一篇博客
本文来自 自己老师 的博客 http://blog.csdn.net/lovelion/article/details/7818983
题目:某软件公司为某电影院开发了一套影院售票系统,在该系统中需要为不同类型的用户提供不同的电影票打折方式,具体打折方案如下:
(1) 学生凭学生证可享受票价8折优惠;
(2) 年龄在10周岁及以下的儿童可享受每张票减免10元的优惠(原始票价需大于等于20元);
(3) 影院VIP用户除享受票价半价优惠外还可进行积分,积分累计到一定额度可换取电影院赠送的奖品。
该系统在将来可能还要根据需要引入新的打折方式
1.要满足开闭原则 二话不说先定义抽象类或接口
namespace StrategyTest {////// 抽象策略类 (折扣类)/// public interface IAbsStrategy{/// /// 打折 抽象方法(用拼音。。)/// /// 价格/// doubledouble DaZhe(double price);} }
2.年龄在十岁以下-10元
namespace StrategyTest {public class ChildrenDaZhe:IAbsStrategy{////// 儿童减10元/// /// /// public double DaZhe(double price){Console.Write("儿童价:");return price - 10;}} }
3.学生打八折
namespace StrategyTest {public class StudentDaZhe:IAbsStrategy{////// 学生8折/// /// /// public double DaZhe(double price){Console.Write("学生价:");return price * 0.8;}} }
4.VIP打5折
namespace StrategyTest {public class VIPDaZhe:IAbsStrategy{////// VIP打5折 积分增加/// /// /// public double DaZhe(double price){Console.Write("VIP价格:");Console.Write("积分增加 +1 ");//积分这里意思一下。。。return price * 0.5;}} }
namespace StrategyTest {////// 电影票 环境类/// 提供两个注入方法(注入为抽象类) 1.构造函数注入 2.方法注入/// public class MovieTicket{private IAbsStrategy abs;//抽象打折private double price;//价格public MovieTicket(){}//构造注入public MovieTicket(IAbsStrategy abs){this.abs = abs;}public double Price{get { return price; }set { price = value; }}//方法注入public void SetStrategy(IAbsStrategy myAbs){this.abs = myAbs;}/// /// 获取打折后的价格/// /// public double GetPrice(){return abs.DaZhe(price);}} }
"1.0" encoding="utf-8" ?>"Srtiategy" value="StrategyTest.ChildrenDaZhe">
namespace StrategyTest {class Program{static void Main(string[] args){string txt = ConfigurationManager.AppSettings["Srtiategy"].ToString();//读取配置文件IAbsStrategy abs = Assembly.Load("StrategyTest").CreateInstance(txt) as IAbsStrategy;//创建实例 MovieTicket move = new MovieTicket(abs);//电影票类 环境类(构造注入)move.Price = 30;//设置原始价格//move.SetStrategy(abs);//方法注入double myPrice= move.GetPrice();//获取价格Console.Write("原始价为:"+move.Price);Console.Write("打完折为:" + myPrice);Console.Read();}} }
结果: 儿童价: 原始价为:30打完折为:20
如果需要修改为VIP打折 则在配置文件中修改
这是我的第一篇文章,说实话没什么技术含量,写的也很烂。。。。,设计模式挺重要的,所以现在复习下,马上毕业了,希望能有个好的开始,