策略模式 极其简单的列子
第一篇博客
本文来自 自己老师 的博客 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
策略模式 极其简单的列子相关推荐
- 策略模式与简单工厂模式区别(转)
最近一直在抽时间研究设计模式,之前对设计模式也有一定的了解,但是都没有平心静气的去研究过,只是了解了一些皮毛,最近打算再深入研究一下,重新打开了设计模式的数据,对之前的疑问一个个的刨根问底,今天看了简 ...
- 大话设计模式-策略模式与简单工厂模式
来源:http://blog.csdn.net/wulingmin21/article/details/6712684 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策 ...
- 策略模式和简单工厂+策略模式
策略模式:以相同的方式调用所有算法,工厂让仕途藏认识到了两个类:工厂类和对象类,而策略模式只有一个Context类来维护. 策略模式: 简单工厂+策略模式 源码地址:http://pan.baidu. ...
- 策略模式、简单工厂结合
需求:使用加密狗进行软件保护,可能会使用不同的加密狗. 分析:加密狗 设计:使用策略模式,但由于策略模式需要使用人员了解哪个组件提供了软件保护服务,于是结合工厂模式对对象进行创建.由于可以使用的加密狗 ...
- 策略模式及简单Java案例代码实现
说明:本文是<大话设计模式>的学习记录及结合网上相关信息编写,原书代码例子采用C#编写,本文采用Java稍加改写.如有不当,欢迎指正,共同进步. 1.策略模式概述: 策略模式(P ...
- 策略模式原来这么简单!
前言 只有光头才能变强 回顾前面: 给女朋友讲解什么是代理模式 包装模式就是这么简单啦 单例模式你会几种写法? 工厂模式理解了没有? 无论是面试还是个人的提升,设计模式是必学的.今天来讲解策略模式~ ...
- 设计模式 学习笔记(1)简单工厂模式、策略模式
1.简单工厂模式 用一个单独的类来做创造实例的过程. public class OperationFactory{ public static Operation createOperate(stri ...
- 设计模式(1)--简单工厂模式、策略模式
设计模式(1)--简单工厂模式.策略模式 1. 简单工厂模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static ...
- 简单工厂和策略模式结合
商场促销活动:打折.满额返现等等 主函数对工厂模式和策略模式结合的调用: class Program { static void Main(string[] args) ...
最新文章
- vue+django2.0.2-rest-framework 生鲜项目(八)
- LINUX 数据盘的格式化与挂载
- CF1100F Ivan and Burgers
- selenium+ python自动化--断言assertpy
- C语言解析Ini格式文件
- 改善代码设计 —— 优化物件之间的特性(Moving Features Between Objects)
- IOS学习笔记——ViewController生命周期详解
- 彻底下载32位office2010
- hibernate sqlserver timestamp_SQLServerException:从时间戳到TIMESTAMP的转换不受支持。
- 星云STS 常用配置
- android bochs,通过 Bochs 让高性能的 Android 手机流畅运行 Windows 虚拟机
- k8s技术预研11--kubernetes网络原理
- 深度学习与神经网络的关系
- C语言中ret的作用,c-RET抑制剂 | c-RET Inhibitor
- java+mail+authen_javamail实现smtp身份认证
- php虚拟主机的配置
- Traffic Light
- ioppc技术_广东电网有限责任公司河源供电局基于IOPPC线路光纤网络智能态势感知技术研究技术服务等5个项目采购公告...
- centOS 7 安装可视化用户界面
- ffprobe获取mp4音视频数据信息
热门文章
- Tomcat 服务器的端口号的修改
- 开发者怎么样做到盈利
- SQL中返回一个字符串在另一个中存在的次数
- 用C++开发Web应用
- 对某课程的建议和意见_2021年河南专升本专科专业对照和考试课程征求意见
- vs2015开发c语言 简书,微软符号服务器_NT_SYMBOL_PATH给VS调试带来的隐藏坑
- linux vscode vim,VSCode Vim进阶操作
- phpnow 安装apache失败_装PHPnow 提示 apache 安装失败 的解决方法
- server sql 数据c盘迁移d盘_oracle 11g dbf数据文件从C盘迁移到D盘
- 用计算机计算教学反思,《用计算器计算》教学反思