自学内容网 自学内容网

策略者模式-C#实现

该实例基于WPF实现,直接上代码,下面为三层架构的代码。

目录

一 Model

二 View

三 ViewModel


一 Model

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.策略者模式
{
    //2,定义环境角色: 持有抽象角色类的对象
    public class ContentOperation
    {
        //持有抽象角色类的对象
        private IncomeTax incomeTax;

        public ContentOperation(IncomeTax incomeTax)
        {
            this.incomeTax = incomeTax;
        }

        //返回实际计算好的税收
        public double GetTax(double income)
        {
            return incomeTax.CalculteTax(income);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.策略者模式
{
    //定义算法策略: 企业所得税的算法
    public class EnterpriseTax : IncomeTax
    {
        public double CalculteTax(double income)
        {
            return (income - 3500) > 0 ? (income - 3500) * 0.04 : 0.000;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.策略者模式
{
    //1,抽象策略类:定义所得税计算策略
    public interface IncomeTax
    {
        double CalculteTax(double income);
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.策略者模式
{
    //定义算法策略: 个体户税收计算方式
    internal class IndividualTax : IncomeTax
    {
        public double CalculteTax(double income)
        {
            return (income - 12000) > 0 ? (income - 12000) * 0.5 : 0.0;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.策略者模式
{
    //3,定义相关算法: 个人所得税的计算方式
    internal class PersonTax : IncomeTax
    {
        public double CalculteTax(double income)
        {
            return income * 0.15;
        }
    }
}

二 View

<Window x:Class="设计模式练习.View.策略者模式.StrategyWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:设计模式练习.View.策略者模式"
        mc:Ignorable="d"
        Title="StrategyWindow" Height="450" Width="800">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <Button Content="个人所得税计算" Grid.Row="0" Command="{Binding personCommand}"/>
            <Button Content="企业所得税计算" Grid.Row="1" Command="{Binding enterpriseCommand}"/>
            <Button Content="个体户所得税计算" Grid.Row="2" Command="{Binding IndividualCommand}"/>
        </Grid>

        <TextBlock Text="{Binding Result}" Grid.Column="1" VerticalAlignment="Center" FontSize="30" TextWrapping="Wrap"/>
    </Grid>
</Window>

三 ViewModel

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 设计模式练习.Model.策略者模式;

namespace 设计模式练习.ViewModel.策略者模式
{
    partial class StrategyWindow_ViewModel : ObservableRecipient
    {
        [ObservableProperty]
        private string result;

        [RelayCommand]
        private void person()
        {
            //计算个人所得税
            PersonTax personTax = new PersonTax();
            double srevenue = 20000.98; //个人收入
            ContentOperation content = new ContentOperation(personTax);
            Result = $"个人收入:{srevenue},个人支付税额:{content.GetTax(srevenue)}";
        }

        [RelayCommand]
        private void enterprise()
        {
            //计算企业所得税
            EnterpriseTax enterprise = new EnterpriseTax();
            double srevenue = 200009086.23; //企业收入
            ContentOperation content = new ContentOperation(enterprise);
            Result = $"企业收入:{srevenue},企业支付税额:{content.GetTax(srevenue)}";
        }

        [RelayCommand]
        private void Individual()
        {
            //计算个体户所得税
            IndividualTax ind = new IndividualTax();
            double srevenue = 200096.23; //企业收入
            ContentOperation content = new ContentOperation(ind);
            Result = $"个体户收入:{srevenue},个体户支付税额:{content.GetTax(srevenue)}";
        }
    }
}


原文地址:https://blog.csdn.net/XiaoWang_csdn/article/details/135854295

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!