自己工资自己算,策略设计模式(Strategy)
标签:
JavaScript
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()); }}
哈哈,有劳所获,开心一下子就行了,继续努力......
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦