设计模式之策略模式

以下是策略模式的工资支付的C#代码,谨供借鉴,欢迎提出您的意见害羞

很多企业的工资支付方式是很灵活的,可支付方式是比较多的,比如:人民币现金支付、美元现金支付、银行转账到工资帐户、银行转账到工资卡;一些创业型的企业为了留住骨干员工,还可能有:工资转股权等等方式 
随着公司的发展,会不断有新的工资支付方式出现,这就要求能方便的扩展;另外工资支付方式不是固定的,是由公司和员工协商确定的,也就是说可能不同的员工采用的是不同的支付方式,甚至同一个员工,不同时间采用的支付方式也可能会不同,这就要求能很方便的切换具体的支付方式。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication19
{
    abstract class Salary
    {
        public abstract void Salary1(Content a);
    }
  class RMBCash:Salary
    {
        public override void Salary1(Content a)
        {
            Console.WriteLine("给{0}使用人民币现金方式支付工资{1}元",a.Name,a.Salary2);
        }
    }
    class DollarCash:Salary
    {
       
        public override void Salary1(Content a)
        {
            Console.WriteLine("给{0}使用美元现金方式支付{1}元",a.Name,a.Salary2);
        }
    }
    class Card:Salary
    {   public override void Salary1(Content a)
        {
            Content1 c = (Content1)a;
        Console.WriteLine("给{0}使用银行卡,卡号{2}支付{1}元",c.Name,c.Salary2,c.Number);
    }
    }
    public class Content
    {
        private Salary s = null;
        private string name;
        private double salary2;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public double Salary2
        {
            get { return salary2; }
            set { salary2 = value; }
        }
        public Content(string type,string name,double salary2)
        {
            this.name = name;
            this.salary2 = salary2;
            switch(type)
            {
                case "人民币现金支付":RMBCash r=new RMBCash();s=r;break;
                case"美元现金支付":DollarCash d=new DollarCash();s=d;break;
                case "银行卡支付": Card c = new Card(); s = c; break;
            }
        }
        public void GetResult()
        {
            s.Salary1(this);
        }
    }
    class Content1:Content
    {
        private string number;
        public string Number
        {
            get { return number;}
            set { number = value; }
        }
        public Content1(string type,string name,double salary2,string number):base(type,name,salary2)
        {
            this.Number = number;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Content zhangsan = new Content("人民币现金支付","张三", 1000);
            zhangsan.GetResult();
            Content1 Tom=new Content1("银行卡支付","Tom",8000,"12121212");
            Tom.GetResult();



        }
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值