设计模式:模板模式和策略模式混合使用

目录

有时单个设计模式并不能满足我们的业务需求,这个时候就要根据具体的业务来混合使用设计模式,其中模板模式和策略模式是比较常用的一个组合。模板模式可以定义这个逻辑的骨架,策略模式可以丰满具体细节的逻辑。

代码示例

java 复制代码
interface Strategy {
    void execute();
}
 // 策略实现类1
class StrategyImpl1 implements Strategy {
    @Override
    public void execute() {
        System.out.println("执行策略1");
    }
}
 // 策略实现类2
class StrategyImpl2 implements Strategy {
    @Override
    public void execute() {
        System.out.println("执行策略2");
    }
}
 // 模板类
abstract class Template {
    // 模板方法,定义了算法的骨架
    public void templateMethod() {
        System.out.println("执行模板方法的前置操作");
        executeStrategy();
        System.out.println("执行模板方法的后置操作");
    }
     // 抽象方法,由子类实现具体的策略
    protected abstract void executeStrategy();
}
 // 模板子类1
class TemplateImpl1 extends Template {
    private Strategy strategy;
     public TemplateImpl1(Strategy strategy) {
        this.strategy = strategy;
    }
     @Override
    protected void executeStrategy() {
        strategy.execute();
    }
}
 // 模板子类2
class TemplateImpl2 extends Template {
    private Strategy strategy;
     public TemplateImpl2(Strategy strategy) {
        this.strategy = strategy;
    }
     @Override
    protected void executeStrategy() {
        strategy.execute();
    }
}
 // 测试类
public class Main {
    public static void main(String[] args) {
        Strategy strategy1 = new StrategyImpl1();
        Strategy strategy2 = new StrategyImpl2();
         Template template1 = new TemplateImpl1(strategy1);
        template1.templateMethod();
         Template template2 = new TemplateImpl2(strategy2);
        template2.templateMethod();
    }
}

这个示例中,我们定义了一个策略接口和两个策略实现类。然后,我们创建了一个模板类,其中定义了一个模板方法和抽象方法。模板方法中包含了算法的骨架,而抽象方法则由子类实现具体的策略。最后,我们创建了两个模板子类,分别使用不同的策略实现类,并在测试类中进行调用。

这个示例是比较简单的示例,具体我们使用的时候会更加的抽象,比如会使用工厂模式把策略类放到工厂中。

优劣点

优点:

  1. 灵活性:通过策略模式,你可以定义多个不同的策略,并在运行时选择使用哪个策略。这使得系统更加灵活,能够根据不同的需求选择合适的策略。

  2. 可扩展性:通过模板模式,你可以定义一个算法的骨架,在模板方法中固定算法的结构,而将具体实现交给子类。这使得系统更容易扩展,可以通过添加新的子类来增加新的实现。

  3. 代码复用:模板模式和策略模式都鼓励代码的重用。模板模式中的模板方法可以在多个子类中共享,而策略模式中的策略可以被多个上下文对象共享使用。

  4. 易于维护:通过将算法的不同部分分离出来,模板模式和策略模式使得代码更加模块化和可维护。当需要修改某个算法的某个部分时,只需要修改相应的子类或策略类,而不会影响到其他部分。

  5. 松耦合:模板模式和策略模式的结合可以实现松耦合的设计。模板模式中的抽象类和策略模式中的接口使得算法的具体实现与使用算法的类之间解耦,从而提高了系统的灵活性和可维护性。

缺点:

  1. 增加了项目的复杂度,对开发要求变高,代码复杂度增加。
  2. 对于新人来说,学习成本增加。新人只有了解了整个项目的设计才能进行开发。
  3. 类数量变多,使用多个设计模式就要遵循响应的规范,导致类数量大大增加,增加维护成本。

总结

总的来说,模板模式和策略模式的混合使用可以提供更灵活、可扩展、可维护的代码结构,同时促进代码的复用和松耦合设计。这种组合可以在需要定义算法骨架的同时,允许动态选择和切换不同的算法实现。

相关推荐
EatFan2 小时前
Spring Boot 4 落地观察:从 yudao-cloud、matecloud、JPower 看国产脚手架的升级路线与迁移清单
java·spring boot·后端·spring cloud·微服务·后端开发·jdk 21
Maiko Star2 小时前
* LangChain 提示词模板详解:ChatPromptTemplate 的使用与高级特性
java·人工智能·langchain
现任明教教主~4 小时前
Thinkphp站群蜘蛛池SaaS系统YanyvSEO含多用户/积分/六大引擎计费/易支付对接
java·开发语言·spring
一条破秋裤5 小时前
Linux 线程创建:pthread_create 与基本回收
java·linux·运维
布吉岛的石头5 小时前
Java 程序员第 49 阶段5:BERT 预训练目标 MLM+NSP 的工程含义
java·人工智能·深度学习·bert·transformer
摇滚侠6 小时前
《On Java 中文版 基础卷》阅读笔记 对象无处不在 03
java·笔记·python
二十雨辰6 小时前
[学成在线]-01项目背景
java
弈栈录7 小时前
Java AI 应用的异步化与高并发设计
java·后端·架构
长按助力退休7 小时前
设计模式实战,这 5 个最常用
设计模式
落魄实习生7 小时前
Agent Scope Java 2.x 系列【2】 ReActAgent
java·开发语言