自己工资自己算,策略设计模式(Strategy)
Insus.NET在想,每在公司或是老板给自己发工资时,每个人都会重新计算一下自己的工资,是否正确。好象老板或是会计都会把自己的工资计错了似的。因此,每个都人都是工资计算高手。
工资计算,需要知道基本工资是多少; 否有加薪,加薪方式,是按基本工资的百分比来加,还是由得公司或是老板随心而加,表现加多些,表现不好加少一些;是否有加班,加班的方式也要清楚,工作天加班,普通假日加班,或是法定假日加班;是否有补帖等等。
每一种方式,在此也算得上是算法,完成的都是相同的工作,只是实现不同罢了。为了简化与分工,我们可以把每种算法写成一个独立的类,减少它们之间的耦合。
每个算法,返回一个结果,因此可以写一个抽象类,让每个算法类继承这个公共接口。
using System; using System.Collections.Generic; using System.Linq; using System.Web;/// <summary> /// Summary description for Wage /// </summary> namespace Insus.NET {public abstract class Wage {public abstract double Salary(double basicWage);} }
具体算法,基本工资:
using System; using System.Collections.Generic; using System.Linq; using System.Web;/// <summary> /// Summary description for BasicWage /// </summary> namespace Insus.NET {public class BasicWage :Wage {public override double Salary(double basicWage){return basicWage;}} }
去年公司业务好,收入丰,因此今年有得加薪,每个员工都是按基本工资百分比来加薪:
using System; using System.Collections.Generic; using System.Linq; using System.Web;/// <summary> /// Summary description for PlusWage /// </summary> namespace Insus.NET {public class PlusWage : Wage {private double _Rate = 1d;public PlusWage(double rate) //加工资百分比 {this._Rate = rate;}public override double Salary(double basicWage){return basicWage * _Rate;}} }
今年沿续去年的业务,项目需要加班完成:
using System; using System.Collections.Generic; using System.Linq; using System.Web;/// <summary> /// Summary description for OvertimeWage /// </summary> namespace Insus.NET {public class OvertimeWage : Wage{private double _Hours;private double _OverTimeHourlyWage;private bool _OfficialHoliday; /// <summary>/// /// </summary>/// <param name="hours">加班小时数</param>/// <param name="rate">加班每小时工资</param>/// <param name="type">节假日,还是普通日</param>public OvertimeWage(double hours, double overTimeHourlyWage, bool officialHoliday) {this._Hours = hours;this._OverTimeHourlyWage = overTimeHourlyWage;this._OfficialHoliday = officialHoliday;}public override double Salary(double basicWage){double salary = _Hours * _OverTimeHourlyWage * basicWage;if (_OfficialHoliday)salary = salary * 3;return salary; }} }
更加多的公司福利算法....
接下来,为了上面各个算法引用,用一个WageContext类来处理:
using System; using System.Collections.Generic; using System.Linq; using System.Web;/// <summary> /// Summary description for WageContext /// </summary> namespace Insus.NET {public class WageContext{private Wage _Wage;public WageContext(string type){switch (type){case "基本工资":_Wage = new BasicWage();break;case "加工资":_Wage = new PlusWage(0.10);break;case "加班工资":_Wage = new OvertimeWage(2, 10, true);break;}}public double GetSalary(double basicWage){return _Wage.Salary(basicWage);}} }
OK,我们来看看这新年后第一个月薪水,公司在加薪,又有加班。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Insus.NET;public partial class WageDemo : System.Web.UI.Page {protected void Page_Load(object sender, EventArgs e){ //"基本工资"//"加工资"//"加班工资"double basicWage = 8000d;double total = 0.0d;WageContext bw = new WageContext("基本工资");total = bw.GetSalary(basicWage);WageContext pw = new WageContext("加工资");double plusSalary = pw.GetSalary(basicWage); total = total + plusSalary;Response.Write(total.ToString());} }
哈哈,有劳所获,开心一下子就行了,继续努力......
转载于:https://www.cnblogs.com/insus/archive/2013/03/01/2939542.html
自己工资自己算,策略设计模式(Strategy)相关推荐
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也经常遇到类似的情况,实现某一个功能有多种算法或者策略,我们能够依据环境或者条件的不同选择不同的算法或者策略来完毕 ...
- 设计模式-策略模式(Strategy)-Java
设计模式-策略模式(Strategy)-Java 目录 文章目录 1.前言 2.示例案例-电影票打折方案 3.策略模式概述 3.1.策略模式定义 3.2.策略模式结构 3.3.策略模式结构图中角色 3 ...
- 趣谈设计模式 | 策略模式(Strategy):你还在使用冗长的if-else吗?
文章目录 案例:指挥官AI 策略模式 配合工厂模式 总结 完整代码与文档 案例:指挥官AI 案例可能不符合实际逻辑,仅用于表述设计模式的思想,勿介意 假设我们开发了一款类似全面战争的即时战略游戏,为了 ...
- 解读设计模式----策略模式(Strategy Pattern)
一.模式概述 策略模式(Strategy Pattern)在外形上与状态模式很相似,但在意图上有些不同.其意图是使这些算法可以相互替换,并提供一种方法来选择最合适的算法. 在我应 ...
- 设计模式--策略模式(strategy)
1.策略模式(strategy ['strætədʒi]) 我的理解是:方案候选模式 (反正关键就是有很多的候选,哈哈) 看了很多例子,都是在说鸭子的,那个例子很好,在这里可以看 他们生产鸭子,我们就 ...
- 设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)
在前段时间呢陆陆续续的更新了一系列关于重构的文章.在重构我们既有的代码时,往往会用到设计模式.在之前重构系列的博客中,我们在重构时用到了"工厂模式"."策略模式" ...
- 前端设计模式之策略(Strategy)模式
定义 策略(Strategy)模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户.策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法 ...
- java api中的设计模式_Java API 设计模式之策略(Strategy)
策略设计模式与状态设计模式相类似.我们提到过,状态设计模式包含一个状态对象,该对象封装一个上下文对象的状态.策略设计模式包含一个策略对象.该对象与状态设计模式的状态对象相类似.它们之间的关键不同在于: ...
- 8.6 GOF设计模式四: 策略模式… Strategy Pattern
策略模式- Strategy Pattern 在POS系统中,有时需要实行价格优惠, 该如何处理? 对普通客户或新客户报全价 对老客户统一折扣5% 对大客户统一折扣10% 注:课件 ...
- 二十四种设计模式:策略模式(Strategy Pattern)
策略模式(Strategy Pattern) 介绍 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法的变化可独立于使用它的客户. 示例 有一个Message实体类,对它的操 ...
最新文章
- CSS3 @keyframes animate
- matlab 蜂窝网格,blender怎么制作蜂巢网格 蜂窝式网格画法
- 2019年4月8日 1021. Remove Outermost Parentheses
- BZOJ 1012: [JSOI2008]最大数maxnumber 单调队列/线段树/树状数组/乱搞
- java工程师_Java开发工程师需要掌握哪些技能?
- spring学习(34):构造函数依赖注入
- 分享一套非常不错的bootstarp3.0.2响应式模板
- java多组List所有的排列组合
- 修改本地管理员密码脚本
- 2021江西高考成绩6月23日几点查询,2021年江西高考成绩查询时间:6月23日
- chrome浏览pdf 字体变了
- win10非核心版本的计算机上
- 各种品牌电脑U盘启动快捷键
- 解决Qt5.7.0 cannot find -lGL
- Kali Linux 渗透测试之被动信息收集(三)——Recon-NG框架
- HTTP状态码:400\500 错误代码(个人总结)
- 复杂交通流对混合交通的影响研究多向车流量分析
- 为变量赋值(SQL)
- 【Unity】Unity实现鼠标控制摄像机围绕物体旋转镜头 滑轮控制远近
- java 3年经验面试题
热门文章
- 【杭电ACM】1.2.6 decimal system
- 实施IT运维管理 循序渐进
- java exec 关闭,Java学习之使用Runtime.exec()启动、关闭Tomcat
- wxpython和tkinter哪个好_为什么很多Python开发者写GUI不用Tkinter,而要选择PyQt和wxPython或其他?...
- python中punctuation_Python中的字符串
- 设置角速度及生成四元数及利用刚体
- linux开发之uboot移植 -- uboot简介
- mac存储空间管理与df命令看到的剩余空间不一样的问题
- 三丰三坐标编程基本步骤_日常皮肤护理的基本三步骤,问题皮肤不要作
- 智慧工厂用到的技术_CCF VC物联网应用技术专业工作组走进苏宁物流智慧仓储工厂参观学习...