首页 > 其他分享 >巨巨巨实用的设计模式-策略模式

巨巨巨实用的设计模式-策略模式

时间:2024-09-18 21:48:29浏览次数:3  
标签:设计模式 String service 实用 MorningTeaEnum import 巨巨巨 com public

策略模式

策略模式是一种常见的设计模式,用于封装不同的算法,并使其可以相互替换。

通过使用策略模式,可以使代码更加灵活、可扩展和易于维护。在实际开发中,我们可以使用策略模式来解决各种不同的问题。

主要是规范化代码,避免if,else的来回嵌套。

比如,我们所在的是个做早餐的公司,开拓市场的时候势必要调研喜好,这个时候我们就需要根据所对应的省份人群的喜好来搭配一个基础套餐,正常在代码中我们可能要用很多嵌套比如:

public static void main(String[] args) {
    String province = "广东";
    /*根据业务的扩展可能会新增很多省份的子公司*/
    if (province.equals("广东")){
        System.out.println("广东人喜好的早餐搭配");
    } else if (province.equals("山西")) {
        System.out.println("山西喜好的早餐搭配");
    } else if (province.equals("河南")) {
        System.out.println("河南喜好的早餐搭配");
    }
}

这里因为代码中没有逻辑所以看着不费劲,在实际的工作中会有很多业务逻辑,使得代码的可读性变得很差,这里我们使用策略模式可以让代码更加清晰明了,策略模式首先的话可以用接口或者抽象类来实现,首先我们要定义一个接口:(接口的定义可以规范实现类的入参和出参,让实现类规范)

 

package com.yxb.service;

import com.yc.dompet.enums.order.MorningTeaEnum;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public interface BreakfastService {
    Object breakFastFangan();
}

然后我们的实现类来继承接口:

package com.yxb.service.impl;
​
import com.yc.dompet.enums.order.MorningTeaEnum;
import com.yxb.service.BreakfastService;
​
/**
 * @author : loong
 * @Description:
 * @Date: 2024-09-18
 */
public class GuangdongBreakfastImpl implements BreakfastService {
​
    @Override
    public Object breakFastFangan() {
        String reganmian = MorningTeaEnum.CHANGFEN.breakfast;
        String hulatang = MorningTeaEnum.HAIXIANZHOU.breakfast;
        String ren = ("广东人的早餐热衷于"+"吃:"+reganmian+",喝:"+hulatang);
        return ren;
    }
}

package com.yxb.service.impl;
​
import com.yc.dompet.enums.order.MorningTeaEnum;
import com.yxb.service.BreakfastService;
​
import java.util.List;
​
/**
 * @author : loong
 * @Description:
 * @Date: 2024-09-18
 */
public class HenanBreakfastImpl implements BreakfastService {
​
    @Override
    public Object breakFastFangan() {
        String hulatang = MorningTeaEnum.HULATANG.breakfast;
        String reganmian = MorningTeaEnum.REGANMIAN.breakfast;
        String ren = ("河南人的早餐热衷于"+"吃:"+reganmian+",喝:"+hulatang);
        return ren;
    }
}

package com.yxb.service.impl;
​
import com.yc.dompet.enums.order.MorningTeaEnum;
import com.yxb.service.BreakfastService;
​
/**
 * @author : loong
 * @Description:
 * @Date: 2024-09-18
 */
public class ShanxiBreakfastImpl implements BreakfastService {
​
    @Override
    public Object breakFastFangan() {
        String hulatang = MorningTeaEnum.MAOERDUO.breakfast;
        String reganmian = MorningTeaEnum.CU.breakfast;
        String ren = ("山西人的早餐热衷于"+"吃:"+reganmian+",喝:"+hulatang);
        return ren;
    }
}

然后在定义一个可以进行实现类之间进行来回切换的类,这个类里的构造器里我们要放上我们的接口,并定义一个方法,以便我们使用那些实现类:(上下文切换)

package com.yxb.service.impl;
​
import com.yxb.service.BreakfastService;
​
/**
 * @author : loong
 * @Description:
 * @Date: 2024-09-18
 */
public class BreakfastContxt {
    private BreakfastService breakfastService;
​
    public BreakfastContxt(BreakfastService breakfastService) {
        this.breakfastService = breakfastService;
    }
    public Object breank(){
​
        return this.breakfastService.breakFastFangan();
    }
}

然后我们就可以在实际使用中通过我们上下文切换的类来调用所需的业务逻辑了

package com.yxb.service.impl;
​
/**
 * @author : loong
 * @Description:
 * @Date: 2024-09-18
 */
public class breakFastDemo {
    public static void main(String[] args) {
        /*通过上下文切换的类,里面放上我们所需要的实现类就可以使用了*/
        BreakfastContxt breakfastContxt = new BreakfastContxt(new ShanxiBreakfastImpl());
        Object breank = breakfastContxt.breank();
        System.out.println(breank.toString());
    }
​
}


最近工作巨忙,没时间学习,今天学习了一下策略模式,很有用的一种模式!
​

标签:设计模式,String,service,实用,MorningTeaEnum,import,巨巨巨,com,public
From: https://blog.csdn.net/Loong_xiaobei/article/details/142344794

相关文章

  • 设计模式之——代理模式
    代理模式前言:我们一般在租房子时会去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做;再比如我们打官司需要请律师,因为律师在法律方面有专长,可以替我们进行操作,表达我们的想法;再比如在淘宝上面买东西,你使用支付宝平台支付,卖家请物流公司发货,......
  • 如何查看微信聊天记录?查看微信聊天记录的4种实用方法【企业科普篇】
     随着微信在日常工作和生活中的广泛应用,聊天记录的查看与管理成为企业管理的重要一环。本文将介绍四种实用的方法来查看微信聊天记录,助力企业高效管理沟通内容。方法一:直接在手机微信中查看最直接的方式是在手机微信中查看聊天记录。打开微信应用,确保已登录账号。在底......
  • 修复 avlf.dll 报错丢失的实用方法
    avlf.dll是一个动态链接库文件,通常与一些防病毒软件或安全软件相关联。这个DLL文件主要用于支持防病毒软件的功能,如扫描病毒、监控系统等。如果avlf.dll报错或丢失,可能会导致相关软件无法正常运行。解决方法如果你遇到了avlf.dll缺失或报错的情况,可以尝试以下几种方......
  • 活动系统开发之采用设计模式与非设计模式的区别-后台功能总结
    1、数据库ER图2、后台功能字段题目功能字段数据列表编号题目名称选项数量状态1=启用0=禁用创建时间修改时间保存题目名称选项集选项内容是否正确答案1=正确0=错误启禁用删除素材图库功能字段数据列表编号原文件名称文件类型文件大小加密后文件名文件具体路径上传类......
  • 教育培训小程序开发,简单实用的入门指南
    教育培训小程序可以帮助教育机构和个人老师提供更灵活的在线教学服务,满足学生的学习需求。对于初学者来说,开发一个功能齐全的教育培训小程序并不复杂,只需掌握一些基础的开发知识和工具即可。本文将带你了解如何使用微信小程序开发工具,创建一个简单实用的教育培训小程序,并展示一些关......
  • 【Linux实用教程】-02- Linux常用命令
    ===点个关注不迷路===......
  • Go 框架 Gin使用 validator 若干实用技巧
    Go框架Gin使用validator若干实用技巧网管叨bi叨  2024年09月17日10:39 北京 以下文章来源于李文周 ,作者李文周李文周.一个北漂程序员的自我更新之旅。在web开发中一个不可避免的环节就是对请求参数进行校验,通常我们会在代码中定义与请求参数相对应的......
  • 渗透测试中16款实用的谷歌插件分享
    所有插件我都放在这个网盘链接了,自行下载即可https://pan.quark.cn/s/2b4f4823fb3b效果图如下首先打开谷歌浏览器,-》扩展程序启动开发者模式打开谷歌版本信息,获取插件路径浏览器输入chrome://version将插件压缩包全部解压放在这个路径就ok了,C:\Users\Admini......
  • AI网站有哪些?AI网站哪个好用?国内免费AI网站还有哪些?最实用的AI工具网站推荐大全 免费
    随着人工智能的快速发展,AI网站越来越多地渗透到我们的日常生活中。无论是文本生成、语音识别,还是图像处理,AI技术都在不断提升我们的工作效率和生活便利性。在这篇博客中,我们将探讨一些知名的AI网站,比较它们的功能和易用性,以及推荐一些免费的平台供大家使用。什么是AI网站?A......
  • 精简实用!一分钟搭建文件管理服务!
    大家好,我是Java陈序员。今天,给大家介绍一款精简实用的文件托管服务,一分钟即可搭建使用!关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。项目介绍Dufs——一款多功能的实用文件服务器。不仅支持静态文件的托管服务,还具备文件上......