Insus.NET在想,每在公司或是老板给自己发工资时,每个人都会重新计算一下自己的工资,是否正确。好象老板或是会计都会把自己的工资计错了似的。因此,每个都人都是工资计算高手。

工资计算,需要知道基本工资是多少; 否有加薪,加薪方式,是按基本工资的百分比来加,还是由得公司或是老板随心而加,表现加多些,表现不好加少一些;是否有加班,加班的方式也要清楚,工作天加班,普通假日加班,或是法定假日加班;是否有补帖等等。

每一种方式,在此也算得上是算法,完成的都是相同的工作,只是实现不同罢了。为了简化与分工,我们可以把每种算法写成一个独立的类,减少它们之间的耦合。

每个算法,返回一个结果,因此可以写一个抽象类,让每个算法类继承这个公共接口。

Wage

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);}
}

具体算法,基本工资:

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;}}
}

去年公司业务好,收入丰,因此今年有得加薪,每个员工都是按基本工资百分比来加薪:

PlusWage

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;}}
}

今年沿续去年的业务,项目需要加班完成:

OvertimeWage

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类来处理:

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,我们来看看这新年后第一个月薪水,公司在加薪,又有加班。

WageDemo.aspx.cs

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)相关推荐

  1. 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)

    设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也经常遇到类似的情况,实现某一个功能有多种算法或者策略,我们能够依据环境或者条件的不同选择不同的算法或者策略来完毕 ...

  2. 设计模式-策略模式(Strategy)-Java

    设计模式-策略模式(Strategy)-Java 目录 文章目录 1.前言 2.示例案例-电影票打折方案 3.策略模式概述 3.1.策略模式定义 3.2.策略模式结构 3.3.策略模式结构图中角色 3 ...

  3. 趣谈设计模式 | 策略模式(Strategy):你还在使用冗长的if-else吗?

    文章目录 案例:指挥官AI 策略模式 配合工厂模式 总结 完整代码与文档 案例:指挥官AI 案例可能不符合实际逻辑,仅用于表述设计模式的思想,勿介意 假设我们开发了一款类似全面战争的即时战略游戏,为了 ...

  4. 解读设计模式----策略模式(Strategy Pattern)

    一.模式概述      策略模式(Strategy Pattern)在外形上与状态模式很相似,但在意图上有些不同.其意图是使这些算法可以相互替换,并提供一种方法来选择最合适的算法.       在我应 ...

  5. 设计模式--策略模式(strategy)

    1.策略模式(strategy ['strætədʒi]) 我的理解是:方案候选模式 (反正关键就是有很多的候选,哈哈) 看了很多例子,都是在说鸭子的,那个例子很好,在这里可以看 他们生产鸭子,我们就 ...

  6. 设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)

    在前段时间呢陆陆续续的更新了一系列关于重构的文章.在重构我们既有的代码时,往往会用到设计模式.在之前重构系列的博客中,我们在重构时用到了"工厂模式"."策略模式" ...

  7. 前端设计模式之策略(Strategy)模式

    定义 策略(Strategy)模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户.策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法 ...

  8. java api中的设计模式_Java API 设计模式之策略(Strategy)

    策略设计模式与状态设计模式相类似.我们提到过,状态设计模式包含一个状态对象,该对象封装一个上下文对象的状态.策略设计模式包含一个策略对象.该对象与状态设计模式的状态对象相类似.它们之间的关键不同在于: ...

  9. 8.6 GOF设计模式四: 策略模式… Strategy Pattern

    策略模式- Strategy Pattern  在POS系统中,有时需要实行价格优惠, 该如何处理?  对普通客户或新客户报全价  对老客户统一折扣5%  对大客户统一折扣10%  注:课件 ...

  10. 二十四种设计模式:策略模式(Strategy Pattern)

    策略模式(Strategy Pattern) 介绍 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法的变化可独立于使用它的客户. 示例 有一个Message实体类,对它的操 ...

最新文章

  1. CSS3 @keyframes animate
  2. matlab 蜂窝网格,blender怎么制作蜂巢网格 蜂窝式网格画法
  3. 2019年4月8日 1021. Remove Outermost Parentheses
  4. BZOJ 1012: [JSOI2008]最大数maxnumber 单调队列/线段树/树状数组/乱搞
  5. java工程师_Java开发工程师需要掌握哪些技能?
  6. spring学习(34):构造函数依赖注入
  7. 分享一套非常不错的bootstarp3.0.2响应式模板
  8. java多组List所有的排列组合
  9. 修改本地管理员密码脚本
  10. 2021江西高考成绩6月23日几点查询,2021年江西高考成绩查询时间:6月23日
  11. chrome浏览pdf 字体变了
  12. win10非核心版本的计算机上
  13. 各种品牌电脑U盘启动快捷键
  14. 解决Qt5.7.0 cannot find -lGL
  15. Kali Linux 渗透测试之被动信息收集(三)——Recon-NG框架
  16. HTTP状态码:400\500 错误代码(个人总结)
  17. 复杂交通流对混合交通的影响研究多向车流量分析
  18. 为变量赋值(SQL)
  19. 【Unity】Unity实现鼠标控制摄像机围绕物体旋转镜头 滑轮控制远近
  20. java 3年经验面试题

热门文章

  1. 【杭电ACM】1.2.6 decimal system
  2. 实施IT运维管理 循序渐进
  3. java exec 关闭,Java学习之使用Runtime.exec()启动、关闭Tomcat
  4. wxpython和tkinter哪个好_为什么很多Python开发者写GUI不用Tkinter,而要选择PyQt和wxPython或其他?...
  5. python中punctuation_Python中的字符串
  6. 设置角速度及生成四元数及利用刚体
  7. linux开发之uboot移植 -- uboot简介
  8. mac存储空间管理与df命令看到的剩余空间不一样的问题
  9. 三丰三坐标编程基本步骤_日常皮肤护理的基本三步骤,问题皮肤不要作
  10. 智慧工厂用到的技术_CCF VC物联网应用技术专业工作组走进苏宁物流智慧仓储工厂参观学习...