设计模式_策略模式

news2024/12/25 0:34:55

策略模式

介绍

设计模式定义案例问题堆积在哪里解决办法
策略模式对算法进现封装,抽象
如:IF elseIF 一大堆
可以配合工厂模式使用
炼丹炉里做饭
要求 菜谱 和 食材可配置
问题在可配置
菜谱
封装菜谱
然后抽象菜谱,为了统一使用方法

类图

CaiPuBase 抽象菜谱

CaiPuA 菜谱A

CaiPuB 菜谱B

CaiPuC 菜谱C

LianDanLu 炼丹炉

代码

CaiPuBase

using System.Collections.Generic;

/// <summary>
/// 菜谱
/// </summary>
public abstract class CaiPuBase
{
    public abstract string Create(List<string> foodList);
}

CaiPuA

using System.Collections.Generic;

public class CaiPuA : CaiPuBase
{
    string funName = "炒";

    public override string Create(List<string> elementList)
    {
        string result;
        result = funName + ":";
        foreach (var item in elementList)
        {
            result += item;
        }

        return result;
    }
}

CaiPuB

using System.Collections.Generic;

public class CaiPuB : CaiPuBase
{
    string funName = "蒸";

    public override string Create(List<string> elementList)
    {
        string result;
        result = funName + ":";
        foreach (var item in elementList)
        {
            result += item;
        }

        return result;
    }
}

CaiPuC 

using System.Collections.Generic;

public class CaiPuC : CaiPuBase
{
    string funName = "煮";

    public override string Create(List<string> elementList)
    {
        string result;
        result = funName + ":";
        foreach (var item in elementList)
        {
            result += item;
        }

        return result;
    }
}

LanDanLu

using System.Collections.Generic;

/// <summary>
/// 炼丹炉
/// </summary>
public class LianDanLu
{
    public string GetFood(CaiPuBase caiPu, List<string> elementList)
    {
        return caiPu.Create(elementList);
    }
}

测试代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestCL : MonoBehaviour
{
    void Start()
    {
        LianDanLu ldl = new LianDanLu();

        {
            List<string> list = new List<string>
            {
                "萝卜",
                "鸡蛋"
            };
            string food = ldl.GetFood(new CaiPuA(), list);
            Debug.Log(food);
        }

        {
            List<string> list = new List<string>
            {
                "萝卜",
                "鸡蛋"
            };
            string food = ldl.GetFood(new CaiPuB(), list);
            Debug.Log(food);
        }

        {
            List<string> list = new List<string>
            {
                "萝卜",
                "鸡蛋"
            };
            string food = ldl.GetFood(new CaiPuC(), list);

            // show
            Debug.Log(food);
        }

    }
}

结果

总结

函数抽象出变量
类抽象出行为

单一的模式很简单 ,难的是从整体出发一步一模式,把细节一直推迟到配置文件/Excel。
多做进行大项目的开发还是很有好处的!
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1174271.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初阶JavaEE(14)表白墙程序

接上次博客&#xff1a;初阶JavaEE&#xff08;13&#xff09;&#xff08;安装、配置&#xff1a;Smart Tomcat&#xff1b;访问出错怎么办&#xff1f;Servlet初识、调试、运行&#xff1b;HttpServlet&#xff1a;HttpServlet&#xff1b;HttpServletResponse&#xff09;-C…

Navicat15更改字体后中文注释显示问题解决办法

Navicat中文注释显示问题解决办法 解决办法&#xff1a; 1 2 3

网络验证码--你到底是爱它还是恨它?

互联网安全防火墙&#xff08;1&#xff09;--网络验证码的科普 1 戏言部分 为了在网络上吸引大家读这个文章&#xff0c;在想标题的时候&#xff0c;也是够了。本来是严肃的科普学术帖&#xff0c;但是却一股强烈的“不转不是中国人&#xff0c;让男孩沉默女孩流泪” 这种…

【Mybatis小白从0到90%精讲】05:Mybatis新增(insert),要掌握的点位,都在这里

文章目录 前言一、编写Mapper二、编写 Mybatis 工具类三、看效果总结前言 身为半自动ORM的Mybaits, 其在查询方面支持任意SQL, 表现出色,那么它在新增insert 方面表现又如何呢? 今天我们来实战 Mybatis新增(insert) 操作,看看它的表现是不是依然出色? 在讨论新增数据时,…

分享88个节日庆典PPT,总有一款适合您

分享88个节日庆典PPT&#xff0c;总有一款适合您 PPT下载链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易。知识付费甚欢喜&#xff0c;为咱码农谋福利…

1.Java Stream 流操作

概念 Stream把将要处理的集合中的元素进行流式化处理 &#xff0c;在流式化处理过程中&#xff0c;借助Stream API对流中的元素进行操作&#xff0c;比如&#xff1a;筛选、排序、聚合等。 Stream 的操作符大体上分为两种&#xff1a;中间操作符和终止操作符 中间操作符 对于…

【10套模拟】【1】

关键字&#xff1a; 快排空间复杂度、算法目标、广义表与树、后缀表达式、AOV网、完全图、子表

java代码检查

jacoco 引入依赖 <dependencies><dependency><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.7</version></dependency><dependency><groupId>org.springframew…

2023-2024 中国科学引文数据库来源期刊列表(CSCD)

文章目录 CSCD来源期刊遴选报告2023-2024 中国科学引文数据库来源期刊列表&#xff08;CSCD&#xff09; CSCD来源期刊遴选报告 2023-2024 中国科学引文数据库来源期刊列表&#xff08;CSCD&#xff09;

【Mybatis小白从0到90%精讲】01:IDEA创建Maven项目,添加Mybatis依赖

文章目录 前言一、IDEA创建Maven项目二、添加依赖前言 Mybatis开发,我们从创建一个Maven项目项目开始,推荐使用的开发工具是IDEA,接下来演示使用IDEA创建Maven项目,并添加Mybatis依赖,每一步对应都有配图,Let’s Go~ 一、IDEA创建Maven项目 打开IDEA,点击左上角菜单:F…

基于java+springboot+vue的校园出入管理系统

项目介绍 本论文主要论述了如何使用JAVA语言开发一个校园出入管理系统 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述校园出入管理系统的当前背景以及系统开…

挑战100天 AI In LeetCode Day01(2)

挑战100天 AI In LeetCode Day01&#xff08;2&#xff09; 一、LeetCode介绍二、LeetCode 热题 HOT 100-22.1 题目2.2 题解 三、面试经典 150 题-23.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站&#xff0c;提供各种算法和数据结构的题目&#xff0c;面向程序…

基于SSM的教学管理系统(有报告)。Javaee项目。

演示视频&#xff1a; 基于SSM的教学管理系统&#xff08;有报告&#xff09;。Javaee项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMvc My…

【唠唠嵌入式】__嵌入式只是一个技术领域,不是一个行业!

目录 前言 阶段1 大一到大三这个阶段我与大多数学生相同&#xff1a; 关于如何学习嵌入式软件开发&#xff1a; ① 学习51单片机 ② 开始查资料看书 ③ 开始学习STM32 ④ 开始增强 C 语言 ⑤ 认真研读 OS 方面的书 ⑥ 自己仿照 ucos 写一个 stm32 上的实时 os 出来 …

七月论文审稿GPT第2版:从Meta Nougat、GPT4审稿到Mistral、LongLora

前言 如此前这篇文章《学术论文GPT的源码解读与微调&#xff1a;从chatpaper、gpt_academic到七月论文审稿GPT》中的第三部分所述&#xff0c;对于论文的摘要/总结、对话、翻译、语法检查而言&#xff0c;市面上的学术论文GPT的效果虽暂未有多好&#xff0c;可至少还过得去&am…

【ArcGIS Pro二次开发】(74):Python、C#实现Excel截图导出图片

以村庄规划制图为例&#xff0c;通过对现状和规划用地的统计&#xff0c;生成Excel格式的【空间功能结构调整表】后&#xff0c;需要进一步将表格导出成图片&#xff0c;并嵌入到图集中&#xff0c;这样可以实现全流程不用手动参与&#xff0c;让制图的流程完全自动化。 关于E…

系列十一、拦截器(二)#案例演示

一、案例演示 说明&#xff1a;如下案例通过springboot的方式演示拦截器是如何使用的&#xff0c;以获取Controller中的请求参数为切入点进行演示 1.1、前置准备工作 1.1.1、pom <dependencies><!-- spring-boot --><dependency><groupId>org.spring…

多模态最新经典论文合集,涵盖预训练、表征学习、多模态融合

最近多模态相关的论文好火&#xff0c;原因就不多说了&#xff08;懂得都懂&#xff09;&#xff0c;因为有不少想发paper的同学来问了&#xff0c;我就火速整理了一部分来和你们分享。 这次整理了6篇最新的多模态论文&#xff0c;还有12篇经典的文章&#xff0c;主要涉及预训…

优先级队列(堆)的概念+模拟堆的实现

文章目录 优先级队列&#xff08;堆&#xff09;的概念模拟堆的实现一、概念1.优先级队列2.堆1.堆的性质2.堆的存储3.堆的创建3.1 向下调整3.2建堆的时间复杂度 O(N) 4.堆的插入4.1向上调整4.2向上调整建堆的时间复杂度&#xff1a;O(N * log N) 5.堆的删除 优先级队列&#xf…

【Java 进阶篇】Java Session 原理及快速入门

大家好&#xff0c;欢迎来到本篇博客。今天&#xff0c;我们将探讨Java Web开发中一个重要而令人兴奋的概念&#xff0c;即Session&#xff08;会话&#xff09;。Session是一种在Web应用程序中跟踪用户状态和数据的机制。我们将深入了解Session的原理&#xff0c;并通过示例来…