第一篇博客

本文来自 自己老师 的博客 http://blog.csdn.net/lovelion/article/details/7818983

题目:某软件公司为某电影院开发了一套影院售票系统,在该系统中需要为不同类型的用户提供不同的电影票打折方式,具体打折方案如下:

(1) 学生凭学生证可享受票价8折优惠;

(2) 年龄在10周岁及以下的儿童可享受每张票减免10元的优惠(原始票价需大于等于20元);

(3) 影院VIP用户除享受票价半价优惠外还可进行积分,积分累计到一定额度可换取电影院赠送的奖品。

该系统在将来可能还要根据需要引入新的打折方式

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.学生打八折

namespace StrategyTest
{public  class StudentDaZhe:IAbsStrategy{/// <summary>/// 学生8折/// </summary>/// <param name="price"></param>/// <returns></returns>public double DaZhe(double price){Console.Write("学生价:");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>/// 电影票 环境类/// 提供两个注入方法(注入为抽象类) 1.构造函数注入 2.方法注入/// </summary>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;}/// <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;//创建实例
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打折  则在配置文件中修改

这是我的第一篇文章,说实话没什么技术含量,写的也很烂。。。。,设计模式挺重要的,所以现在复习下,马上毕业了,希望能有个好的开始,

转载于:https://www.cnblogs.com/StoneSH/archive/2013/04/04/2999422.html

策略模式 极其简单的列子相关推荐

  1. 策略模式与简单工厂模式区别(转)

    最近一直在抽时间研究设计模式,之前对设计模式也有一定的了解,但是都没有平心静气的去研究过,只是了解了一些皮毛,最近打算再深入研究一下,重新打开了设计模式的数据,对之前的疑问一个个的刨根问底,今天看了简 ...

  2. 大话设计模式-策略模式与简单工厂模式

    来源:http://blog.csdn.net/wulingmin21/article/details/6712684 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策 ...

  3. 策略模式和简单工厂+策略模式

    策略模式:以相同的方式调用所有算法,工厂让仕途藏认识到了两个类:工厂类和对象类,而策略模式只有一个Context类来维护. 策略模式: 简单工厂+策略模式 源码地址:http://pan.baidu. ...

  4. 策略模式、简单工厂结合

    需求:使用加密狗进行软件保护,可能会使用不同的加密狗. 分析:加密狗 设计:使用策略模式,但由于策略模式需要使用人员了解哪个组件提供了软件保护服务,于是结合工厂模式对对象进行创建.由于可以使用的加密狗 ...

  5. 策略模式及简单Java案例代码实现

    说明:本文是<大话设计模式>的学习记录及结合网上相关信息编写,原书代码例子采用C#编写,本文采用Java稍加改写.如有不当,欢迎指正,共同进步. 1.策略模式概述:      策略模式(P ...

  6. 策略模式原来这么简单!

    前言 只有光头才能变强 回顾前面: 给女朋友讲解什么是代理模式 包装模式就是这么简单啦 单例模式你会几种写法? 工厂模式理解了没有? 无论是面试还是个人的提升,设计模式是必学的.今天来讲解策略模式~ ...

  7. 设计模式 学习笔记(1)简单工厂模式、策略模式

    1.简单工厂模式 用一个单独的类来做创造实例的过程. public class OperationFactory{ public static Operation createOperate(stri ...

  8. 设计模式(1)--简单工厂模式、策略模式

    设计模式(1)--简单工厂模式.策略模式 1. 简单工厂模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static ...

  9. 简单工厂和策略模式结合

    商场促销活动:打折.满额返现等等 主函数对工厂模式和策略模式结合的调用: class Program     {         static void Main(string[] args)     ...

最新文章

  1. vue+django2.0.2-rest-framework 生鲜项目(八)
  2. LINUX 数据盘的格式化与挂载
  3. CF1100F Ivan and Burgers
  4. selenium+ python自动化--断言assertpy
  5. C语言解析Ini格式文件
  6. 改善代码设计 —— 优化物件之间的特性(Moving Features Between Objects)
  7. IOS学习笔记——ViewController生命周期详解
  8. 彻底下载32位office2010
  9. hibernate sqlserver timestamp_SQLServerException:从时间戳到TIMESTAMP的转换不受支持。
  10. 星云STS 常用配置
  11. android bochs,通过 Bochs 让高性能的 Android 手机流畅运行 Windows 虚拟机
  12. k8s技术预研11--kubernetes网络原理
  13. 深度学习与神经网络的关系
  14. C语言中ret的作用,c-RET抑制剂 | c-RET Inhibitor
  15. java+mail+authen_javamail实现smtp身份认证
  16. php虚拟主机的配置
  17. Traffic Light
  18. ioppc技术_广东电网有限责任公司河源供电局基于IOPPC线路光纤网络智能态势感知技术研究技术服务等5个项目采购公告...
  19. centOS 7 安装可视化用户界面
  20. ffprobe获取mp4音视频数据信息

热门文章

  1. Tomcat 服务器的端口号的修改
  2. 开发者怎么样做到盈利
  3. SQL中返回一个字符串在另一个中存在的次数
  4. 用C++开发Web应用
  5. 对某课程的建议和意见_2021年河南专升本专科专业对照和考试课程征求意见
  6. vs2015开发c语言 简书,微软符号服务器_NT_SYMBOL_PATH给VS调试带来的隐藏坑
  7. linux vscode vim,VSCode Vim进阶操作
  8. phpnow 安装apache失败_装PHPnow 提示 apache 安装失败 的解决方法
  9. server sql 数据c盘迁移d盘_oracle 11g dbf数据文件从C盘迁移到D盘
  10. 用计算机计算教学反思,《用计算器计算》教学反思