C#设计模式之策略模式
来源:互联网 发布:linux高性能服务器 pdf 编辑:程序博客网 时间:2024/06/03 11:34
一、策略模式简介:
1.定义
策略模式属于对象的行为模式。其用意是针对一组算法,将这一组中的每一个算法封装到具有共同接口的独立的类中,从而使他们可以互相替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
2.使用场景
有时候针对一个对象,其行为可能是不变的,也可能是在不断改变的,针对不同情况就要有不同的表现形式。对于这些容易变化的行为,我们应该灵活运用,而不是将行为绑定在对象中,最好的状态就是可以动态的进行改变。简言之,策略模式就是为了应对对象中复杂多变的行为而产生的。
二、策略模式的结构:
策略模式是对算法的包装,是把调用的算法的责任(行为)和算法本身(行为实现)分割开来,委派给不同的对象管理。简单来说就是 准备一组算法,把每一个算法都封装起来,使得他们可以互换。
这个模式有三个角色:
对象:复杂多变的对象。
接口。
封装了相关的算法和行为。
三、具体场景实现:
假设现在要设计一个贩卖各类书籍的电子商务网站的购物车系统。一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这要复杂。比如,本网站可能对所有的高级会员提供每本20%的促销折扣;对中级会员提供每本10%的促销折扣;对初级会员没有折扣。
根据描述,折扣是根据以下的几个算法中的一个进行的:
算法一:对初级会员没有折扣。
算法二:对中级会员提供10%的促销折扣。
算法三:对高级会员提供20%的促销折扣。
1.接口类,用来连接对象和类中封装的方法(算法)
public interface MemberStrategy { /** * 计算图书的价格 * param booksPrice 图书的原价 * return 计算出打折后的价格 */ double calcPrice(double booksPrice); //接口的方法和属性都是公共的,就没有必要留下“public”修饰符了 }2.封装一系列方法的类
(1)初级会员
public class PrimaryMemberStrategy : MemberStrategy { public double calcPrice(double booksPrice) { Console.WriteLine("对于初级会员的没有折扣."); return booksPrice; } }(2)中级会员
public double calcPrice(double booksPrice) { Console.WriteLine("对于中级会员的折扣为10%"); return booksPrice * 0.9; }(3)高级会员
public double calcPrice(double booksPrice) { Console.WriteLine("对于高级会员的折扣是20%"); return booksPrice * 0.8; }3.价格类
public class Price { private MemberStrategy strategy; /** * 构造函数,传入一个具体的策略对象 * @param strategy 具体的策略对象 */ public Price(MemberStrategy strategy) { this.strategy = strategy; } public double quote(double booksPrice) { return this.strategy.calcPrice(booksPrice); } }
4.具体实现
static void Main(string[] args) { MemberStrategy strategy = new AdvancedMemberStrategy();//实例化一个高级会员类的对象 Price price = new Price(strategy); double quote = price.quote(300); Console.WriteLine("图书的最终价格是:"+quote); Console.ReadKey(); }
- C# 设计模式之 策略模式 示例
- c#设计模式之策略模式
- C#设计模式之策略模式
- c# 设计模式:策略模式
- c#设计模式-策略模式
- C#设计模式之22——策略模式
- C#设计模式之策略者模式(Stragety Pattern)
- C#设计模式之策略模式(Strategy Pattern)
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- apache 虚拟主机配置最简单仅 4 行代码搞定
- 先序遍历构建二叉树 java
- 802.11学习(一)LAN组件
- JAVA的23种设计模式---访问者模式
- numpy中loadtxt与genfromtxt函数
- C#设计模式之策略模式
- 脉冲云--解决DevOps人员的'痛'
- 【OpenCV3图像处理】形态学 开运算 闭运算
- Visual Studio 各种版本间代码的转换
- .NET、ASP.NET、C# 三者之间的关系
- 关于网站推送消息的几个初步考虑
- 微信公众号开发 Token和凭证Access Token
- 网站技术架构发展--[引子]
- PHP使用任务计划实现定时任务