(6)设计模式之策略模式(结构型模式)

设计模式总结篇-创建型&结构型&行为型 区别、联系 一、创建型: 创建型模式,就是创建对象的模式,抽象了实例化的过程。它帮助一个系统独立于如何创建、组合和表示它的那些对象。关注的是对象的创建,创建型模式将创建对象的过程进行了抽象,也可以理解为将创建对象的过程进行了封装,作为客户程序仅仅需要去使用对象,而不再关心创建对象过程中的逻辑。 创建型 简单工厂模式 严格意义来说,不属于GOF23种设计模式 工厂方法模式 只... 阅读详情

声明:以下都是博主浅薄的经验之谈,欢迎大家学习交流

  • 需求1【获取某公司中年龄小于 35 的员工信息】
  • Main.java
public class Main{
public static void main(String[] args){
/**1、模拟员工数据**/
    List<Employee> emps = Arrays.asList(
                new Employee(101, "张三", 18, 9999.99),
                new Employee(102, "李四", 59, 6666.66),
                new Employee(103, "王五", 28, 3333.33),
                new Employee(104, "赵六", 8, 7777.77),
                new Employee(105, "田七", 38, 5555.55)
    );
    List<Employee> list = filterEmployeeAge(emps);
        for (Employee employee : list) {
            System.out.println(employee);
        }
}
/**获取年龄小于35岁的员工**/
public List<Employee> filterEmployeeAge(List<Employee> emps){
        List<Employee> list = new ArrayList<>();
        for (Employee emp : emps) {
            if(emp.getAge() < 35){
                list.add(emp);
            }
        }
        return list;
    }
}
  • Employee.java
public class Employee {
    private int id;
    private String name;
    private int age;
    private double salary;
    //...省略set、get
}
  • 需求2【获取某公司中年龄小于 18的员工信息】
public class Main{
public static void main(String[] args){
/**1、模拟员工数据**/
    List<Employee> emps = Arrays.asList(
                new Employee(101, "张三", 18, 9999.99),
                new Employee(102, "李四", 59, 6666.66),
                new Employee(103, "王五", 28, 3333.33),
                new Employee(104, "赵六", 8, 7777.77),
                new Employee(105, "田七", 38, 5555.55)
    );
    List<Employee> list = filterEmployeeAge(emps);
        for (Employee employee : list) {
            System.out.println(employee);
        }
}
/**获取年龄大于35岁的员工**/
public List<Employee> filterEmployeeAge(List<Employee> emps){
        List<Employee> list = new ArrayList<>();
        for (Employee emp : emps) {
            if(emp.getAge() < 18){
                list.add(emp);
            }
        }
        return list;
    }
}
  • 需求3【获取某公司中年龄小于 18的员工信息】
  • 需求4【获取某公司中年龄大于 100的员工信息】
  • 需求….,由此可看出,都需要在实现一个方法,但方法中的大部分代码都是一致,显然这不合理

  • 策略模式引入(核心:接口回调来实现。用两个开发人员去开发一个项目功能的思维来理解)

  • Main.java

public class Main{
public void static main(String[] args){
     //A开发人员调用方法
    List<Employee> list = filterEmployee(emps, new FilterEmployeeForAge());
}
    //B开发人员提供方法和自己定义的接口
public List<Employee> filterEmployee(List<Employee> emps, MyPredicate<Employee> mp){
        List<Employee> list = new ArrayList<>();
        for (Employee employee : emps) {
            if(mp.test(employee)){
                list.add(employee);
            }
        }
        return list;
    }
}
  • MyPredicate.java
//B开发人员提供的接口
public interface MyPredicate<T> {
    public boolean test(T t);
}
  • FilterEmployeeForAge .java
//A开发人员实现B开发人员提供的接口
public class FilterEmployeeForAge implements MyPredicate<Employee>{
    @Override
    public boolean test(Employee t) {
        return t.getAge() <= 35;
    }
Cesium生态盘点:超图、火星3D等15个二次开发框架对比 本文深入解析Cesium生态中的15个二次开发框架,包括超图、火星3D等主流选择,帮助开发者根据项目需求进行精准选型。从性能表现、功能完备性、开发友好度等维度进行对比,特别适合需要处理地理空间数据和构建三维可视化的JavaScript开发者。 阅读详情

相关推荐

RAGFlow + GraphRAG+ 知识图谱 + QwQ32B探索实践

RagFlow 是一款开源的 RAG(Retrieval-Augmented Generation)引擎,专注于深度文档理解,能够助力企业及个人构建高效的 RAG 工作流程。借助大语言模型(LLM),它可以精准处理各种复杂格式的数据,为用户提供可靠的问答服务,并附上详实的引用依据。

技术引领业务创新 8万+

设计模式——Strategy(策略)模式

目录前言1 定义2 适用性3 结构3.1 结构图3.2 参与者4 实际应用举例4.1 Context——List列表和StuContext4.2 具体策略:ConcreteStrategyA和ConcreteStrategyB4.3 测试demo5 总结参考文献 前言 当我们对一个对象的某个操作,比如文本分析或者对象排序有多种算法,但是如果硬编码进它们的类中,将导致出现后续扩展困难,复杂度较高等。策略模式提出了一种方法解决这种情况。 1 定义 Strategy(策略)模式:定义一系列算法,并把它们独立封装到

qq_36566262的博客 1560

MCP详解:手把手教你理解和如何使用各种开源MCP服务

MCP 作为一种开放协议,为 AI 模型与外部世界的连接提供了标准化的解决方案。它不仅降低了开发门槛,还极大地扩展了 AI 应用的边界。无论是开发者还是普通用户,都可以通过 MCP 更高效地利用 AI 技术,实现更多智能化的功能。

王哥儿聊AI的博客 6056

设计模式(一)策略模式——策略模式结构

前言 策略模式是行为型设计模式的一种,关于策略模...

lishuzhen5678的博客 685

Java开发者的福音:Aspose 25.10全系列(Cells/Words/PDF/Slides)最新版破解与集成保姆级教程

本文为Java开发者提供了Aspose 25.10全系列组件(Cells/Words/PDF/Slides)的最新版破解与集成保姆级教程。通过详细的Maven依赖配置、字节码修改技术绕过限制,以及Spring Boot项目中的实战集成指南,帮助开发者高效实现Office文档处理功能,提升开发效率。

weixin_30919429的博客 346

Codex辅助小说创作:零成本AI写作指南与实战技巧

自然语言处理技术通过深度学习模型理解语义上下文,其核心原理是基于大规模文本训练的语言模型预测能力。在创意写作领域,这项技术的价值在于突破传统写作工具的功能局限,实现从内容生成到风格模仿的智能化辅助。特别是提示词工程的应用,让创作者能够精准控制AI输出的内容和风格。在实际应用场景中,AI写作工具显著降低了小说创作门槛,适用于网络小说、奇幻科幻等多种文学类型。本文以OpenAI Codex为例,详细解析如何利用AI技术完成从故事大纲设计、章节生成到平台发布的全流程创作,其中提示词优化和内容质量把控是提升生成效果

weixin_32678995的博客 564

设计模式: 策略模式

策略模式是一种行为型设计模式,它允许定义一组算法,并将每个算法封装在独立的类中,使它们可以互相替换。策略模式通过将算法的使用与算法的实现分离,使得算法可以独立于客户端而变化。在策略模式中,通常会有一个上下文(Context)类,该类包含一个策略接口(Strategy),以及具体的策略类(Concrete Strategies)。上下文类将具体的任务委托给策略接口,在运行时可以根据需要切换不同的策略类,从而达到动态改变算法行为的目的。策略模式的核心思想是面向接口编程,而不是面向实现编程。

玉汝于成 1182

数字锁相环的原理与FPGA实现

数字锁相环是锁相环电路的全数字实现。锁相环电路能够实现对输入信号的相位进行跟踪,进而在噪声中提取纯净的有用信号。以上就是今天要讲的内容,本文简单地介绍了锁相环的原理,然后,在Vivado仿真平台上,通过verilog做仿真验证。最终仿真结果能够实现锁定,但锁定时间较长,表明参数仍可做调整。

weixin_45857378的博客 8510

《JAVA与模式》之策略模式

在阎宏博士的《JAVA与模式》一书中开头是这样描述策略(Strategy)模式的:   策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 策略模式的结构   策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列...

weixin_30607659的博客 595

uniapp - 鸿蒙真机运行报错hvigor ERROR: Failed :entry:default@CompileArkTS...,hvigor ERROR: default@CompileAr

uniapp鸿蒙报错> hvigor ERROR: Failed :entry:default@CompileArkTS... hvigor ERROR: default@CompileArkTS watch work[0] failed. 【HarmonyOS】工程编译后报错hvigor ERROR: Failed :entry:default@CompileArkTS,uniAPP鸿蒙开发无法编译运行启动报错,工程编译后报错,运行不起来,删除掉项目entry下的build和.preview缓存文件后重新

🏆 前端领域优质创作者 4791

【深度解析】解决 NVIDIA 显卡“掉卡”与 Xid 79 错误:开启持久化模式 (Persistence Mode)

【深度解析】解决 NVIDIA 显卡“掉卡”与 Xid 79 错误:开启持久化模式 (Persistence Mode)

Edward的博客 864

策略模式,看一篇就够了

在策略模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对象。策略对象改变 context 对象的执行算法。...

weixin_45866849的博客 9446

廖雪峰Python教程[完整版]

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

Go 项目开发常用设计模式

介绍了 Go 项目开发过程中常见的设计模式,包括:单例模式、工厂模式、策略模式、模板模式、代理模式、选项模式

Shoulen的博客 1995

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

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

Go语言中常见的6个设计模式

Go语言中常见的6个设计模式

席万里的博客 893

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

JavaScript 设计模式----设计模式初识

JavaScript 设计模式----设计模式初识

qq_43645678的博客 469

前端设计模式应应用场景

观察者模式(Observer Pattern)定义了一种一对多的关系,让多个订阅者对象同时监听某一个发布者,或者叫主题对象,这个主题对象的状态发生变化时就会通知所有订阅自己的订阅者对象,使得它们能够自动更新自己。也就是说,第二次使用同一个类创建新对象的时候,应该得到与第一次创建的对象完全相同的对象。对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。

ll_883963的博客 521

【设计模式】三大类:创建型模式、结构型模式、行为型模式

1 创建型模式 本人理解:以C++为例,创建对象时,用关键字new来创建(实例化)对象。用一个函数或类将new的过程封装起来,就是创建型模式。 《设计模式》中的描述: 创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。 一个类----创建型模式使用继承改变被实例化的类, 一个对象-创建型模式将实例化委托给另一个对象。 (看后,一头雾水) 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton

郭老二 5845

设计模式详解之策略模式

策略模式是一种应用广泛的行为型模式,核心思想是对算法进行封装,委派给不同对象来管理,本文将着眼于策略模式进行分享。

阿里技术 5815

【设计模式】创建型模式/结构型模式/行为型模式概述

一、设计模式的分类 根据其目的(模式是用来做什么的)可分为创建型 (Creational),结构型(Structural)和行为型 (Behavioral)三种: • 创建型模式主要用于创建对象。 • 结构型模式主要用于处理类或对象的组合。 • 行为型模式主要用于描述对类或对象怎样交互和怎样分配职责。 根据范围,即模式主要是用于处理类之间关系还是处理对象之间的关系,可分为类模式和...

LittleWheat的博客 7757

设计模式(二)结构型模式

Java 中一般认为有23 种设计模式,我们不需要所有的都会,但是其中常用的几种设计模式应该去掌握。 下面列出了所有的设计模式。需要掌握的设计模式我单独列出来了,当然能掌握的越多越好。 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模...

huopusa的博客 1万+

瑞_23种设计模式_策略模式

本文章为瑞_系列专栏之《23种设计模式》的策略模式篇。工厂模式结合策略模式可以替换 if-else 语句。策略模式主要目的是避免使用多重条件语句,并将算法的实现从使用算法的客户端代码中分离出来。在策略模式(Strategy Pattern)中一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

阿瑞——从事Java后端,喜欢研读源码、自研框架、分享经验 2992

设计模式——桥接设计模式(结构型)

桥接设计模式是一种结构型设计模式,用于将抽象与实现解耦,使二者可以独立变化。它通过将一个类拆分为“抽象”和“实现”两部分,并通过桥接关系组合,避免了类继承层次结构过于庞大。桥接模式包含抽象类、扩充抽象类、实现类接口和具体实现类等角色。在实现方式上,结合了策略模式,适用于风控系统通知等场景。桥接模式适合维度较多的场景,与其他设计模式有明显区别,实战示例展示了其在项目中的应用和优势。

庄小焱 1640

创建型设计模式、结构型设计模式与行为型设计模式 上下文任务通用方案 设计模式 大全

设计模式(Design Pattern)是一种面向对象编程思想,分为创建型模式、结构型模式与行为型模式三大类,提供在特定上下文中解决常见任务通用方案,旨在让程序(软件)具有更好特点,如降低耦合性、提高内聚性、增强可维护性、可扩展性、重用性和灵活性等。

JINGWHALE 2825

设计模式——装饰器设计模式(结构型)

文中主要介绍了装饰器设计模式,它是一种结构型设计模式,可在不改变原有类代码的情况下,动态为对象添加额外功能。文中详细阐述了装饰器模式的角色、结构、实现方式、适合场景以及实战示例等内容,还探讨了其与其他设计模式的结合使用,帮助读者全面理解装饰器设计模式。

庄小焱 1549

UVM设计模式 ( 四 ) 模板模式、策略模式、default_sequence、uvm_callback

上一篇介绍了结构型设计模式:单例模式和工厂模式,接下来介绍行为型设计模式在UVM中的应用。 策略模式

Holden_Liu的博客 5136

Java架构师之路九、设计模式:常见的设计模式,如单例模式、工厂模式、策略模式、桥接模式等

抽象工厂模式提供一个接口,用于创建一系列相关或相互依赖的对象。

shenzhiyoushen的博客 2154
上一篇: (5)设计模式之建造者模式(创建型模式)
下一篇: (7)设计模式之代理模式(结构型模式)-静态代理
yi博说
博客等级 码龄11年 20粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值