【C#】理解策略模式中接口的使用

项目中有这样一个需求:

每隔一段时间模拟发生一个事件,事件发生后有两种处理方式,二选一:
1,将事件内容储存到数据库,并将内容打包拷贝到指定共享文件夹;
2,事件内容不储存到数据库,直接发送到指定API;

使用接口实现过程:

0、TestEvent事件类:

public class TestEvent
    {
        /// <summary>
        /// 名称
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 发生时间
        /// </summary>
        public string BeginTime { get; set; }
        /// <summary>
        /// 结束时间
        /// </summary>
        public string FinishTime { get; set; }
    }

1、定义一个接口,即发布事件的方法:

interface IPublishMode
    {
        /// <summary>
        /// 发布事件
        /// </summary>
        /// <param name="te"></param>
        void Publish(TestEvent te);
    }

2、定义两个类来实现接口,即上面提到的处理事件的两个方法:
(1)功能1-储存到数据库:

    /// <summary>
    /// 存储到数据库
    /// </summary>
    public class SaveInDatabase : IPublishMode
    {
        public void Publish(TestEvent te)
        {
            SaveXXX(te);
        }

        /// <summary>
        /// 举个例子,需要用到的方法,实际可能有多个
        /// </summary>
        /// <param name="te"></param>
        private void SaveXXX(TestEvent te)
        {
            //.......
            Console.WriteLine("存储到数据库");
        }
    }

(2)功能2-发送到服务:

    /// <summary>
    /// 发送到服务
    /// </summary>
    public class SendToServer : IPublishMode
    {
        public void Publish(TestEvent te)
        {           
            SendXXX(te);
        }

        /// <summary>
        /// 举个例子,需要用到的方法,实际可能有多个
        /// </summary>
        /// <param name="te"></param>
        private void SendXXX(TestEvent te)
        {
            //.......

            Console.WriteLine("发送到服务");
        }
    }

3、调用接口,实现功能。
这里先声明一个接口字段,然后需要用哪个功能,就在构造函数中实例化哪个。

public class Simulate
    {
        private Timer _tim;

        /// <summary>
        /// 声明一个接口字段,需要用哪个功能就在构造函数中实例化哪个
        /// </summary>
        private IPublishMode _publish;

        public Simulate()
        {
            _tim = new Timer();           
            _tim.Elapsed += _tim_Elapsed;
            //需要用到哪个功能就实例化哪个,比如这里就用将事件存储到数据库的功能
            _publish = new SaveInDatabase();
        }
        
        /// <summary>
        /// 开始模拟
        /// </summary>
        public void Start()
        {
            _tim.Interval = 1000;
            _tim.Start();
        }

        private void _tim_Elapsed(object sender, ElapsedEventArgs e)
        {
            TestEvent te = CreateEvent();
            //将事件存储到数据库
            _publish.Publish(te);
        }

        /// <summary>
        /// 生成事件
        /// </summary>
        /// <returns></returns>
        private TestEvent CreateEvent()
        {
            TestEvent te = new TestEvent();

            //一些操作......

            return te;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值