基于C#的设计模式学习之策略模式

        策略模式是一种行为型模式,其定义了一系列的算法(行为),将算法封装起来,这样它们可以实现相互替换使用,且算法的使用不会影响算法使用的客户。例如:诸葛亮在面对司马懿时,使用空城计,在赤壁之战中使用草船借箭计,就可以将两个计略封装成两个算法,到时间调用即可。

 

namespace Designmode.Strategy
{
    /// <summary>
    /// 统一的行为接口
    /// </summary>
    public interface IStrategy
    {
        /// <summary>
        /// 策略行为
        /// </summary>
        void DoSomething();
    }
}
namespace Designmode.Strategy
{
    /// <summary>
    /// 草船借箭策略的实现类
    /// </summary>
    public class CaoChuanJieJianJi : IStrategy
    {
        public void DoSomething()
        {
            Console.WriteLine("使用草船借箭计");
        }
    }
}
namespace Designmode.Strategy
{
    /// <summary>
    /// 空城计策略的实现类
    /// </summary>
    public class KongChengJi : IStrategy
    {
        public void DoSomething()
        {
            Console.WriteLine("使用空城计");
        }
    }
}
namespace Designmode.Strategy
{
    /// <summary>
    /// 策略的使用者
    /// </summary>
    public class User
    {
        /// <summary>
        /// 用户名称
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 用户使用策略
        /// </summary>
        /// <param name="s"></param>
        public void Do(IStrategy s)
        {
            Console.WriteLine($"{this.Name} do something");
            //TODO: usr 使用s做某些事情
            s?.DoSomething();
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Designmode.Strategy;
namespace Designmode
{
    class Program
    {

        static void Main(string[] args)
        {

            #region 策略模式
            User zhugeliang = new User() {Name ="诸葛亮" };
            //TODO:诸葛亮使用草船借箭计
            zhugeliang.Do(new CaoChuanJieJianJi());
            //TODO: 诸葛亮使用空城计
            zhugeliang.Do(new KongChengJi());
            #endregion
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值