泛型策略模式的介绍和使用!

简介: 泛型策略模式的介绍和使用!

前言

之前设计过一个高扩展的系统,其中主要用的设计模式思想是:泛型策略模式+泛型模版模式。

这篇文章先介绍一下泛型策略模式的使用!

策略模式

策略模式主要用于某个对象或场景可能存在多种不同的行为的场景,可能是不同的业务逻辑,可能是不同的算法。

策略模式有三个主要组成部分:

  • 策略接口
  • 定义所有支持的算法的公共接口。
  • 具体策略类
  • 实现策略接口的具体算法。
  • 上下文类
  • 持有策略接口的引用,并调用具体策略的方法。

UML类图

泛型策略模式

什么是泛型策略模式?

泛型策略模式是一种使用泛型来定义策略模式的设计模式。

  • 它通过将策略模式中的具体策略类改为泛型类,使得策略模式更加灵活和可扩展。

如何定义泛型策略模式

Java中,可以通过泛型定义策略模式的方法是:

  • 使用泛型接口、泛型类以及泛型方法。

其中,泛型接口用于定义策略接口,泛型类实现具体策略,泛型方法则用于在上下文类中调用具体策略。

泛型策略模式优势

使用泛型定义策略模式可以提高代码的复用性和类型安全性。

泛型允许我们在编写代码时不指定具体类型,而是在使用时确定具体类型。

  • 这样可以减少代码冗余,提高代码的灵活性和可维护性。

下面将详细介绍如何使用泛型来定义策略模式,并通过2个示例来展示其应用。

实现步骤

使用泛型定义策略模式的步骤

定义泛型策略接口:

定义一个泛型接口,它包含具体算法的抽象方法。

  • 这个接口将被具体策略类实现。
public interface Strategy<T> {
    void execute(T data);
}

实现具体策略类:

实现具体策略类,这些类将实现泛型策略接口,并提供具体的算法实现。

定义上下文类:

定义上下文类,它持有策略接口的引用,并通过泛型方法调用具体策略。

使用策略模式:

在客户端代码中使用策略模式,通过上下文类调用具体策略。

泛型策略模式的扩展

在实际应用中,泛型策略模式可以与其他设计模式结合使用,如工厂模式、装饰器模式等,以实现更复杂的功能。

  • 例如:可以使用工厂模式创建具体策略实例,使用装饰器模式增强策略功能。

工厂模式创建策略:

客户端代码:

泛型策略模式的局限性

尽管泛型策略模式有很多优点,但也有一些局限性。

首先,泛型策略模式在某些情况下可能会导致代码复杂度增加,尤其是在处理复杂的泛型约束时。

  • 其次,泛型策略模式要求对泛型有深入理解,对于初学者可能较为困难。

案例举例1

实现一个基于Java泛型的消息处理框架,使得后面添加新消息时只需添加对应的消息处理器。

消息接口

定义一个通用的消息接口,让所有消息类型实现这个接口:

public interface Message {
    // 可以定义一些通用的方法,如果需要
}

消息处理器接口

定义一个通用的消息处理器接口,使用泛型来绑定消息类型。

public interface MessageHandler<T extends Message> {
    void handle(T message);
}

具体消息类型

实现具体的消息类型,每个类型都继承Message接口。

消息处理器

为每个消息类型实现对应的处理器,实现MessageHandler接口。

消息处理器注册

为了让框架能够根据消息类型找到对应的处理器,使用一个处理器的注册表,并通过反射或泛型机制来实现。

具体使用

后面添加新的消息类型时:

  • 只需实现新的消息类和对应的处理器,并在处理器注册时将其注册即可。

案例举例2

大家在购买商品的时候都希望找一些优惠券,让购买的商品更加实惠。

而且到了大促的时候就会有更多的商品优惠券。

  • 各种类型优惠券有:满减、直减、折扣券等。

垃圾实现

优雅设计

优惠券折扣接口:

增加了泛型用于不同类型的接口可以传递不同的类型参数。

优惠券折扣接口实现:

策略控制类:

总结

使用泛型定义策略模式可以提高代码的复用性、灵活性和可维护性。

在实际应用中,结合其他设计模式可以实现更复杂的功能。

但在使用泛型策略模式时,也要注意其局限性,避免过度设计导致代码复杂度增加。

相关文章
|
设计模式 uml 微服务
个人理解简单工厂模式和策略模式的区别
个人理解简单工厂模式和策略模式的区别
113 1
|
3月前
|
设计模式 算法
工厂模式与策略模式的区别
【8月更文挑战第22天】
42 2
工厂模式与策略模式的区别
|
6月前
|
设计模式 算法
模板模式
​ 如有错误或有补充,以及任何改进的意见,请留下您的高见 定义 模板模式是一种行为型设计模式,它在一个抽象类中公开定义了执行它的方法的方式/模板。子类可以按需重写方法实现,但调用将以抽象类中定义的方式进行。这种模式的核心思想是将一个算法的骨架定义在一个抽象类中,而将一些步骤延迟到子类中实现。 实现模板模式的步骤包括: 抽象出一个模板类,该类定义了执行算法的骨架。 抽象类中定义算法的骨架,骨架中的具体算法由子类实现。 子类按需重写方法实现,但调用将以抽象类中定义的方式进行。 使用final修饰模板方法,防止别人重写模板方法。 优点 提高了代码的可维护性和复用性。 减少了代码冗余,使算法的修
32 0
|
6月前
|
算法 数据安全/隐私保护
行为型 策略模式
行为型 策略模式
35 1
|
6月前
行为型 模板模式
行为型 模板模式
37 0
|
设计模式 算法
抽象类应用模板方法模式和接口应用之策略设计模式
抽象类应用模板方法模式和接口应用之策略设计模式
60 0
|
设计模式 算法 Java
详解模板模式
1.概述 模板模式是一种常用的设计模式,它定义了一个操作中的算法的骨架,将某些步骤延迟到子类中实现。模板模式使得子类可以在不改变算法结构的情况下重新定义算法中的某些步骤。 模板模式中有两个角色:
139 0
|
消息中间件 设计模式 JavaScript
为什么我不再推荐枚举策略模式?
为什么我不再推荐枚举策略模式?
|
设计模式 程序员
嘿!策略模式和工厂模式的区别你知道吗?
嘿!策略模式和工厂模式的区别你知道吗?
|
设计模式 Java Spring
枚举方式实现设计模式-策略模式
枚举方式实现设计模式-策略模式
枚举方式实现设计模式-策略模式