设计模式:策略模式

简介: 之前的设计模式帖子  设计模式系列目录 今天说一下策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 换句话说策略模式,是指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法,比如吃东西的行为,有的人喜欢狼吞虎咽,有的人 喜欢细嚼慢咽,有的人喜欢边吃边说 策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。

之前的设计模式帖子

 设计模式系列目录

今天说一下策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户

换句话说策略模式,是指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法,比如吃东西的行为,有的人喜欢狼吞虎咽,有的人

喜欢细嚼慢咽,有的人喜欢边吃边说

策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。

 看一下简单的代码实现

#region  策略模式

    #region  抽象策略
    public abstract class Stratety
    {
        public abstract void StrategyInterface();//子类要实现的方法
    }
    #endregion

    #region  具体策略
    public class ConcreteStrategyA:Stratety
    {
        public override void StrategyInterface()
        {
            Console.WriteLine("A:类A的实现方法");
        }
    }

    public class ConcreteStrategyB : Stratety
    {
        public override void StrategyInterface()
        {
            Console.WriteLine("B:类B的实现方法");
        }
    }

    public class ConcreteStrategyC : Stratety
    {
        public override void StrategyInterface()
        {
            Console.WriteLine("C:类C的实现方法");
        }
    }
    #endregion

    public class Context
    {
        Stratety stratety;

        public Context(Stratety f_Stratety)
        {
            stratety = f_Stratety;
        }

        public Context()
        {
        }

        public void ExecFun()
        {
            if (stratety != null)
                stratety.StrategyInterface();
        }
    }

    #endregion
static void Main(string[] args)
        {
          
            #region  策略模式

            Context _context;
            _context = new Context(new ConcreteStrategyA());
            _context.ExecFun();

            _context = new Context(new ConcreteStrategyB());
            _context.ExecFun();

            _context = new Context(new ConcreteStrategyC());
            _context.ExecFun();
            #endregion

            Console.ReadLine();
        }

 

策略模式的优点: 
    1.提供了管理相关算法族的方法。 
    2.可以避免使用多重条件转移语句。 
    缺点: 
    3.必须知道所有的具体策略类及它们的区别. 
    4.生成许多的策略类。 

 

 

 

 

目录
相关文章
|
9天前
|
云安全 监控 安全
|
14天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1473 8
|
7天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
489 12
|
19天前
|
人工智能 前端开发 算法
大厂CIO独家分享:AI如何重塑开发者未来十年
在 AI 时代,若你还在紧盯代码量、执着于全栈工程师的招聘,或者仅凭技术贡献率来评判价值,执着于业务提效的比例而忽略产研价值,你很可能已经被所谓的“常识”困住了脚步。
1178 88
大厂CIO独家分享:AI如何重塑开发者未来十年
|
19天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
1270 43