策略者模式和工厂模式的应用

实际场景解释策略模式与工厂模式的应用 策略模式和工厂模式都是常见的设计模式,它们在解耦对象的创建和使用方面有很好的效果。策略模式可以使算法的实现互相替换,从而提高系统的灵活性和可维护性;工厂模式可以将对象的创建和具体实现分离,从而提高代码的可维护性和可扩展性。在实际应用中,我们可以根据具体的需求来选择适合的设计模式。 阅读详情

在开发中经常遇到的一种情况就是,我们在不同的业务情况,实现不同的业务,比如学生
成绩>=90 优秀
成绩>=80 <90 良好
成绩>=70 <80 中等
成绩<60 不及格
在这种情况下,我们需要用if else来判断出每种情况,给不同的评分。

 if(grade>=90){
            toGradeA();
        }else if(grade>=80 && grade<90){
            toGradeB();
        }else if(grade>=60 && grade<80){
            toGradeC();
        }else{
            toGradeD();
  }

我们根据学生的成绩,执行不同的业务,如果按照上面的写法,创建不同的方法,如果新增比如0分的
再加if else判断。这样,这个类慢慢变的特别大,比较难以维护。因为上面的业务是非常简介的,实际开发中
还面临各种各样复杂的情况。再举个例子,支付宝会员制
大众会员 0
黄金会员 2000
铂金会员 6000
钻石会员 18000

再比如我们聊天发送接收消息,消息类型可以是文本,语音,图片,将来可以增加表情或者视频等等。

  if(typeMessage.equals("text")){
            //文本类型消息,显示文本信息
        }else if(typeMessage.equals("image")){
            //图片类型消息,显示图片
        }else if(typeMessage.equals("sound")){
            //语音类型消息,显示语音图标
    }

分析:

  1. 在不同的业务分支中,我们需要执行不同的业务。
  2. 过多的if else分支语句,使类复杂,难以维护。

解决办法:

  1. 策略者模式
    根据不同的消息,实现不同的策略规则,不同的会员类型,一定会针对不同的业务类型,需要抽取出来,最终不同的类型有不同的实现(我理解的是设计模式的核心是抽象)
  2. 工厂模式
    消息类型是固定的,因此我们需要创建消息类型,比如文本消息,语音消息----工厂模式
    工厂模式用来创建对象,所有的会员对象已经在我们的工厂模式内,将来新增一条消息类型,只需要在工厂中增加一条和实现既可。
    这样,就消除的if else判断(策略者模式是知道当前哪种模式,实现不同的策略,也就是如果工厂不返回当前会员类型,我们仍然需要判断,因此如果工厂返回的当前对象类型
    示例:
    1、新建接口,消息类型处理的抽象
public interface MsgStrategy {
     void handleMsg(String type);
}

2、不同的消息类型,实现接口
语音类型消息

public class SoundMessageStrategy implements MsgStrategy {
    @Override
    public void handleMsg(String type) {
        Log.i("Strategy","SoundMessageStrategy");
    }
}

图片类型消息

public class ImageMessageStrategy implements MsgStrategy {
    @Override
    public void handleMsg(String type) {
        Log.i("Strategy","ImageMessageStrategy");
    }
}

文本类型消息

public class TextMessageStrategy implements MsgStrategy {
    @Override
    public void handleMsg(String type) {
        Log.i("Strategy","TextMessageStrategy");
    }
}

3、新建创建对象的工厂

public class StrategyFactory {

    private static  final String IMAGE="image";
    private static  final String SOUND="sound";
    private static  final String TEXT="text";
    private static StrategyFactory factory = new StrategyFactory();
    private StrategyFactory(){
    }
    private static Map strategyMap = new HashMap<>();
    static{
        strategyMap.put(IMAGE, new ImageMessageStrategy());
        strategyMap.put(SOUND, new SoundMessageStrategy());
        strategyMap.put(TEXT, new TextMessageStrategy());

    }
    public MsgStrategy creator(String type){
        return (MsgStrategy) strategyMap.get(type);
    }
    public static StrategyFactory getInstance(){
        return factory;
    }

}

4、新建消息策略的控制器,根据不同的消息来处理不同的业务类型。

public class StrategyController {
    private MsgStrategy msgStrategy;

    public StrategyController() {
    }
    public void handleMsg(String type){
        msgStrategy=StrategyFactory.getInstance().creator(type);
        this.msgStrategy.handleMsg(type);
    }
}

5、测试:

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "Member#MainActivity";
    private String typeMessage= "sound";
    private StrategyController strategyController;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        strategyController=new StrategyController();
        strategyController.handleMsg(typeMessage);
    }
}
城市规划师必备:ArcMap里用这个免费工具,5步完成建筑群通风廊道分析 本文介绍了城市规划中利用ArcMap进行建筑群通风廊道分析的高效方法,重点讲解了迎风面投影指数(FAI)的应用。通过5个步骤,从数据准备到规划应用,帮助规划师快速评估城市通风潜力,优化建筑布局,提升城市风环境质量。 阅读详情

相关推荐

电动汽车整车控制器 UDS诊断功能开发调试优化方法

摘要:通过某电动汽车VCU开发过程中,UDS诊断功能的调试,发现一些测试中存在的问题,比如覆盖度不够、效率低下等,提出了相应的优化方法,并经过测试验证其可行性,此方法亦可推广应用至BMS、HCM等其他控制器的UDS诊断开发调试过程中。希望能给相关技术人员带来参考和帮助。

qq_43011586的博客 2142

【C语言】输入学生的成绩score,根据成绩判断成绩级别:90分(含)以上输出“优秀”;80分(含)以上输出“良好”;60分(含)以上输出“及格”,60分以下输出“不及格”。 个人题解

输入学生的成绩score,根据成绩判断成绩级别:90分(含)以上输出“优秀”;80分(含)以上输出“良好”;60分(含)以上输出“及格”,60分以下输出“不及格”。 #include <stdio.h> #include<stdlib.h> int main() { int score = 0; scanf_s("%d", &score); if (score >= 90) { printf("优秀"); } if (score >= 80

m0_60578848的博客 1万+

UQLab——其他概率分布随机变量转换标准Gaussian分布

1、使用UQLab将其他类型的随机变量转换成标准Gaussian分布; 2、使用科学计数法输出样本,方便后续ANSYS的调用分析; 3、基于MC的可靠度分析。 原随机变量分布类型: % 调用UQLab进行采样 clc clear uqlab %% Specify these distributions as a UQLab INPUT object: PriorOpts.Marginals(1...

ikhui7的博客 3013

介绍一下什么是策略工厂

通过告诉工厂需要哪种策略,工厂会负责创建相应的策略实例,而客户端则可以通过统一的接口来调用这些策略的方法,而无需关心具体实现的细节。我来解释一下,就是我可以找这个工厂告诉他我需要什么策略,他就可以把这个策略(接口的实现类)给我,然后我调用方法就可以了,因为他们都是相同的父类,所以我不用关心这些策略的实现类是什么,只需要知道他们的名字就行了。同时,通过使用相同的接口,客户端可以统一对待不同的策略,降低了代码的耦合度,提高了代码的可维护性和可扩展性。包含了用于选择和创建策略的方法。策略工厂相对于简单工厂。

qq_44145781的博客 654

Dify视觉模型节点避坑指南:我用Qwen2.5-VL做OCR识别时踩过的3个坑(及解决方案)

本文分享了使用Dify平台和Qwen2.5-VL视觉模型进行OCR票据识别时遇到的三个常见问题及解决方案,包括文件变量传递、结构化输出和条件分支判断失效。通过实战经验,帮助开发者优化多模态模型在财务自动化中的应用,提升OCR识别精度和效率。

weixin_29284885的博客 402

SAP Business Technology Platform 支持的技术栈

SAP Business Technology Platform(简称 BTP)是 SAP 提供的一个综合技术平台,旨在帮助企业实现业务转型和创新。BTP 融合了数据库管理、应用开发、集成、分析和智能技术,为企业提供从基础架构到端到端应用的全面服务。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1567

详解Singleton、Factory、Strategy在项目中的应用

一、前言 前几天阅读一框架文档,里面有一段这样的描述 “从对象工厂中………” ,促使写下本文。尽管一些模式简单和简单,但是常用、有用。 结合最近一个项目场景回顾一下里面应用到的一些模式 Singleton、Factory、Strategy。 Singleton:创建型模式,负责创建维护一个全局唯一实例 Factory:创建型模式,对象工厂负责根据标识创建或获取具体的实例对象 Strategy:行...

qianlia的博客 936

冲压机器人系列编程:ABB IRB 6700_(6).RAPID编程语言入门

主菜单:包含文件、编辑、视图、工具等常用操作。项目浏览器:显示当前项目的文件结构,包括机器人模型、程序模块等。图形界面:用于创建和编辑机器人的虚拟环境。RAPID代码编辑器:用于编写和编辑RAPID代码。仿真控制面板:用于控制仿真过程,包括启动、暂停、停止等。变量是存储数据的容器,可以通过变量名访问和修改其存储的数据。变量定义时需要指定其类型和名称。% 定义一个整数变量并赋初值% 定义一个实数变量,未赋初值函数定义时需要指定其返回类型和参数。num result;子程序类似于函数,但不返回值。

zhubeibei168的博客 1378

对Factory,strategy,template模式的总结

一)Factory工厂模式:1)简单工厂模式相当于new一个实例。而作为工厂,当然new的不只是一个实例,而是多个实例。我们可以通过switch或者if来控制生成你所需要的实例。2)抽象工厂模式抽象工厂的作用是来new一组实例对象,通过extends一个抽象类,重写多个抽象方法,每个抽象方法new一个实例对象。这样,就可以一个实现可以同时实例化一组对象。二)stra

佳茗的专栏 446

QQ也能连接OpenClaw啦!手机QQ远程操控本地AI保姆级教程

2026年最新OpenClaw与QQ连接教程发布,支持手机远程操控本地AI。腾讯官方推出QQ Bot插件,无需服务器即可实现三步绑定。教程提供三种连接方案:新手首选的扫码连接(10分钟搞定)、稳定的QQ群机器人方案,以及公网接入方案。详细步骤包括版本更新、插件安装、扫码绑定和功能测试,并附常见问题解决方案。该功能让用户通过QQ指令即可实现文件整理、文档生成等电脑操作,真正实现"手机发指令,电脑自动干"。

通俗易懂学IT 590

破局KS滑块验证码:从参数加密到轨迹生成,Python逆向全流程避坑实录

快手滑块验证码破解实战:从逆向分析到自动化实现 摘要:本文详细记录了破解快手滑块验证码(KS滑块)的完整过程。通过48小时的逆向分析,揭示了KS滑块的双重校验机制:不仅需要精准定位滑块缺口位置,还需满足参数加密和轨迹特征校验。文章从反爬逻辑分析入手,介绍了工具选型与环境配置的避坑要点,重点讲解了滑块缺口距离计算方法和核心加密参数slide_sign的逆向过程。通过OpenCV边缘检测和Frida动态调试技术,成功实现了滑块验证的自动化,准确率提升至99%。文中附有Python实现代码和实际操作踩坑记录,为开

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1662

golang 策略模式与策略工厂模式

什么是策略模式 策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。 什么是策略工厂模式 在一个使用策略模式的系统中,当存在的策略很多时,客户端管理所有策略算法将变得很复杂,如果在环境类中使用策略工厂模式来管理这些策略类将大大减少客户端的工作复杂度 代码 在下面的代码中,分别用策略模式和策略工厂模式实

m0_37681974的博客 1187

111. 如何创建 SAP ABAP 锁对象(Lock Object)和加锁以及解锁函数

至此,我们完成了 ABAP 系统锁机制和加锁解锁函数的介绍。有了这些基础知识,大家就能在实际工作中,使用 Lock Object 和加锁解锁函数,编写出支持并发访问控制的 ABAP 应用程序了。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1532

深入理解工厂模式和策略模式:应用场景与实现方法

工厂模式是一种创建型设计模式,用于定义一个创建对象的接口,但将具体对象的实例化推迟到子类中。工厂模式有助于将对象的创建与使用分离,使得代码更加灵活和可维护。策略模式是一种行为型设计模式,用于定义一系列算法,将每一个算法封装起来,并使它们可以互换。策略模式让算法的变化不会影响到使用算法的客户端。工厂模式和策略模式在软件设计中各有其独特的作用。工厂模式用于解决对象创建的问题,将创建逻辑集中到工厂类中,提高了系统的灵活性和可维护性。

weixin_41859354的博客 1538

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

策略模式和工厂模式在促销系统下的应用

策略模式和工厂模式在促销系统下的应用 设计模式为我们提供了在某些应用场景下特定问题的解决方案,今天我们利用策略模式和工厂模式实现一个简单的促销系统。 实现语言:PHP 我们先来回顾一下策略模式和工厂模式的基本知识 策略模式 Gof 对策略模式的作用的说明如下 定义一系列的算法,把他们一个个封装起来,并且使他们可以相互替换。本模式使得算法可独立于他的客户而变化。 策略模...

math_chao的博客 1286

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

php策略模式与工厂模式,策略模式和工厂模式在促销系统下的应用

策略模式和工厂模式在促销系统下的应用标签: 设计模式 策略模式 工厂模式 促销系统 php设计模式为我们提供了在某些应用场景下特定问题的解决方案,今天我们利用策略模式和工厂模式实现一个简单的促销系统。实现语言:PHP我们先来回顾一下策略模式和工厂模式的基本知识策略模式Gof 对策略模式的作用的说明如下定义一系列的算法,把他们一个个封装起来,并且使他们可以相互替换。本模式使得算法可独立于他的客户而变...

weixin_39611754的博客 219

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

spring项目开发中工厂模式和策略模式应用

在java开发中,有时会遇见类似下图的场景 if (condition) { ... } else if (condition) { ... } ... else { ... } 看过设计模式的同学,都会想到用策略模式来解决问题:定义一个接口,在分别创建几个实现该接口的实现类。不同情况则调用不同实现类的该方法即可。更优化点就是在加上工厂模式来生成不同实现类。具体代码就不...

wanlin77的博客 647

策略模式、工厂模式和模板模式的应用

测试类具体使用参考以往操作。测试类具体使用参考以往操作。

m0_74295055的博客 518

设计模式(1)——简单工厂模式和策略模式的结合应用

一、前言   设计,为蓝图,为构建之根本。个人对于设计模式的理解:设计模式是软件开发过程中一些常用pattern的概括总结。这些思想终究是别人实践过程中存在着背景因素的产物,可以用,但不可滥用。   最近在学习软件设计模式方面的知识,在这里实现每个使用场景记录一下自己的学习过程。 二、功能   简单工厂模式:是属于工厂模式的一种,它使用一个集中了所有实例(产品)的创建逻辑的工厂类去实例化对...

weixin_30527551的博客 139

策略模式和简单工厂及反射的联合应用(待续)

策略模式和简单工厂及反射的应用(待续)

DZT的专栏 431

ISDP011_应用策略+适配器+工厂模式实现支付宝和微信支付

介绍阿里支付和微信支付的配置,编写阿里页面支付和微信native支付的服务接口。设计自定义支付策略注解,应用适配器模式应对第三方移动支付接口的变化。编写适配器工厂,根据前端支付参数payType灵活注入对应的适配器实例,提高扩展性。

HappyCodingBlog@SCAU 709

策略模式 + 工厂模式

该模式定义了一些里而算法, 并将每个算法封装起来, 是他们可以互相替换, 且算法的变化不会影响使用算法的客户. 策略模式属于对象行为模式, 它通过对算法进行封装, 把使用该算法的责任和算法的实现分割开来, 并委派给不同的对象对这些算法进行管理优点策略类之间可以自由切换 – 由于策略类都是先同一个接口, 所以使他们之间可以自由切换易于扩展 – 增加一个新的策略只需要添加一个具体的策略类即可, 基本不需要改变原有的代码, 符合"开闭原则"某特定场景下相对。

社畜程序员的无聊博客 8966

工厂模式和策略模式区别以及使用

策略模式是一种行为型模式,它的核心在于定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换。这种模式让算法的变化独立于使用算法的客户,即算法可以独立于客户端变化,客户端可以通过策略模式选择不同的算法来执行任务。Context(上下文):用来与策略接口交互的类。Strategy(策略):定义了一系列算法的接口。ConcreteStrategy(具体策略):实现了策略接口的具体算法类。工厂模式是一种创建型模式,用于创建对象,但不直接指定具体类。它使用一个共同的接口来指向新创建的对象。

ning的博客 778

【设计模式】实际场景解释策略模式与工厂模式的应用

策略模式和工厂模式是常见的设计模式,它们可以帮助我们更好地组织和管理代码,提高代码的可维护性和可扩展性。在本篇博客中,我将使用Java和SpringBoot作为示例,详细讲解策略模式和工厂模式的概念、场景和示例,并且帮助读者更好地理解它们的异同。谈谈我们工作中的23个设计模式策略模式和工厂模式都是常见的设计模式,它们在解耦对象的创建和使用方面有很好的效果。策略模式可以使算法的实现互相替换,从而提高系统的灵活性和可维护性;工厂模式可以将对象的创建和具体实现分离,从而提高代码的可维护性和可扩展性。

DreamSun的博客 1117

策略模式和工厂模式

简析策略模式和工厂模式

FH201611的博客 1810

策略模式与工厂模式的结合使用

简介: 策略模式: 定义了一组算法(业务规则); 封装了每个算法; 这族的算法可互换代替(interchangeable)。 组成: 抽象策略角色: 策略类,通常由一个接口或者抽象类实现。 具体策略角色:包装了相关的算法和行为。 环境角色:持有一个策略类的引用,最终给客户端调用。 实操代码: 1、定义策略抽象类: 2、自...

baidu_20608025的博客 3736
上一篇: Android中常见的安全问题
android_xiaogang
博客等级 码龄12年 89粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值