CSharp设计模式读书笔记(22):策略模式(学习难度:★☆☆☆☆,使用频率:★★★★☆)...

策略模式(Strategy Pattern):定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。

模式角色与结构:

示例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace CSharp.DesignPattern.StrategyPattern
{class Program{static void Main(string[] args){MovieTicket mt = new MovieTicket();double originalPrice = 60.0;double currentPrice;mt.Price = originalPrice;IDiscount discount = new StudentDiscount(); // 也可以用配置文件和反射创建新的对象mt.Discount = discount; // 注入折扣对象
currentPrice = mt.GetCurrentPrice();Console.Write("student price: " + currentPrice.ToString());}}// 环境类class MovieTicket{public double GetCurrentPrice(){return _discount.calculate(this._price);}public double Price{get { return _price; }set { _price = value; }}public IDiscount Discount{set { _discount = value; }}private double _price;private IDiscount _discount; // 维持一个对抽象策略类的引用
    }// 抽象策略类  interface IDiscount{double calculate(double price);}// 具体策略类class StudentDiscount : IDiscount{public double calculate(double price){return price * 0.8;}}// 具体策略类class ChildrenDiscount : IDiscount{public double calculate(double price){return price - 10;}}// 具体策略类class VIPDiscount : IDiscount{public double calculate(double price){return price * 0.5;}}
}

 

转载于:https://www.cnblogs.com/thlzhf/p/3993799.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401444.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

评论 展开|收起

场景: 列表中文本最多三行,超出部分省略,并显示展开收起按钮,如果文本没有超出三行则不显示展开收起按钮 方案: 1)在div 中添加一个span 然后给div设置超出三行省略,这时候就可以获取到文本高…

引用类型赋值

转载于:https://www.cnblogs.com/dongyuhan/p/6519711.html

Windows Phone开发(30):图形 转:http://blog.csdn.net/tcjiaan/article/details/7453028

图形如矩形、椭圆、路径等都从Shape类派生&#xff0c;它们一般表示规则或不规则图形&#xff0c;这些图形都是简单的二维图形&#xff0c;我相信大家都能理解的。 例一&#xff1a;矩形。 请看下面的XAML代码。 [html] view plaincopyprint? <Rectangle RadiusX"20&q…

Windows Phone开发(46):与Socket有个约会 转:http://blog.csdn.net/tcjiaan/article/details/7669315...

不知道大家有没有“谈Socket色变”的经历&#xff1f;就像我一位朋友所说的&#xff0c;Socket这家伙啊&#xff0c;不得已而用之。哈&#xff0c;Socket真的那么恐怖吗&#xff1f; 其实这话一点也不假&#xff0c;Socket有时候真的不太好操控&#xff0c;也不好维护&#xff…

百度分享插件wbuid属性无法@指定微博

好久不写博客&#xff0c;看到很多人遇到相关的问题&#xff0c;决定写一篇拯救大家于水火 现象很简单&#xff0c;你要是根据官网的例子来&#xff0c;肯定出错。。。。 官网上教你如果想在分享时自动""并且在分享后提示关注要用wbuid这个属性来配置微博id对不对&am…

10 进制转 2 进制、16 进制

为什么80%的码农都做不了架构师&#xff1f;>>> function IntToBin(Value: LongInt; Size: Integer): String; vari: Integer; beginResult:;for i:Size-1 downto 0 dobeginif Value and (1 shl i)<>0 thenResult:Result1elseResult:Result0;end; end;//举例…

SSH之Hibernate总结篇

Hibernate hibernate 简介&#xff1a; hibernate是一个开源ORM(Object/Relationship Mipping)框架&#xff0c;它是对象关联关系映射的持久层框架&#xff0c;它对JDBC做了轻量级的封装&#xff0c;而我们java程序员可以使用面向对象的思想来操纵数据库。 为什么要用hibernate…

Vue开发规范

规范目的 为提高团队协作效率 便于后台人员添加功能及前端后期优化维护 输出高质量的文档 命名规范 为了让大家书写可维护的代码&#xff0c;而不是一次性的代码 让团队当中其他人看你的代码能一目了然 甚至一段时间时候后你再看你某个时候写的代码也能看 css命名规范 遵循…

Vue项目搭建流程

Vue 简介 vue是目前前端最具前景的框架之一&#xff0c;能帮助我们快速搭建并开发前端项目。 Vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;…

Vue模板语法详解

vue基础、安装、介绍双大括号&#xff08;Mustache语法&#xff0c;又叫胡子语法&#xff09;v-textv-htmlv-showv-if、v-else-if、v-elsev-show 与 v-if 的区别v-forv-for 中的 keyv-if 与 v-for 一起使用v-on&#xff08;缩写&#xff1a; &#xff09;v-bind&#xff08;缩写…

小白如何从零开始运营微信公众号?

小白如何从零开始运营微信公众号&#xff1f; 一、公众号定位&#xff0c;名称&#xff0c;头像 第一步公众号定位&#xff0c;最重要。如果你自己都讲不清楚自己是干嘛的&#xff0c;还有谁愿意来关注你呢&#xff1f;无论是旅游攻略还是美妆种草&#xff0c;成长干货还是养生…

软件测试技术lab1 2017.3.13

1.安装Junit和Hamcrest 2. 安装Eclemma 3.三角问题的测试用例 4.测试结果及coverage覆盖 转载于:https://www.cnblogs.com/kale12/p/6543904.html

Fiddler 抓包详细使用教程

主要抓包工具介绍与对比&#xff08;一&#xff09;Fiddler介绍&#xff08;二&#xff09;Fiddler与其他工具对比&#xff08;三&#xff09;工作原理&#xff08;四&#xff09;下载安装&#xff08;五&#xff09;Fiddler界面概述1 主菜单说明2. 快捷菜单说明3.会话列表说明…

如何学习微信公众平台的开发?

如何学习微信公众平台的开发&#xff1f; 在整个移动互联网的开发技术中&#xff0c;微信公众号的开发几乎是成本最低&#xff0c;传播最快&#xff0c;影响最广的&#xff0c;你几乎不需要再添加任何配置&#xff0c;就可以开始。 个人可以申请公众号&#xff0c;需要高级权限…

pom.xml配置文件配置jar(不用记,快速配置)

1&#xff1a;网址:http://mvnrepository.com/ 2:在搜索栏搜索要用的框架;例如spring *以下为示例 转载于:https://www.cnblogs.com/kaiwen/p/6545581.html

HTML中各种 div 位置距离关系

HTML中各种 div 位置距离关系一. 盒模型图片展示&#xff1a;二. 位置距离计算属性三. 应用场景一. 盒模型图片展示&#xff1a; 二. 位置距离计算属性 offsetWidth, offsetHeight 获取盒子的宽度/高度&#xff08;包括盒子的border&#xff0c;padding和内容width/height&…

Docker运行操作系统环境(BusyBoxAlpineDebian/UbuntuCentOS/Fedora)

目前常用的Linux发行版主要包括Debian/Ubuntu系列和CentOS/Fedora系列。前者以自带软件包版本较新而出名&#xff1b;后者则宣称运行更稳定一些。选择哪个操作系统取决于读者的具体需求。同时&#xff0c;社区还推出了完全基于Docker的Linux发行版CoreOS。 使用Docker&#xff…

poj1681 Painter's Problem高斯消元

链接http://poj.org/problem?id1681 View Code 1 #include <stdio.h> 2 #include <string.h>3 #include <algorithm>4 #include <cmath>5 using namespace std;6 int d[230][230], N, M;7 char s[16][16]; 8 void solve( int n)9 { 10 int x[230…

小程序、vue 新闻上下轮播

小程序、vue 新闻上下轮播vue小程序红色部分&#xff1a;相当于放映机&#xff0c;也就是容器&#xff0c;overflow&#xff1a;hidden绿色内容&#xff1a;相当于胶片&#xff0c;也就是domvue vue的核心之一&#xff0c;数据驱动模版&#xff0c;循环播放映射的数据上就是 […

ajax.actionlink使用问题

突然发现ajax.actionlink调用的方法全是GET方式的&#xff0c;就算制定了POST也不行&#xff0c;Confirm窗口也弹不出来。。。直接StackOverFlow搜索 ajax.actionlink post not work, 出来一堆结果&#xff0c;有的是因为路由参数不对&#xff0c;有的是回调方法不对&#xff…