admin 管理员组

文章数量: 887007

JAVA 中模板设计模式的运用

介绍

    在软件开发中,设计模式是一种被广泛采用的方法,用来解决一下常见的设计问题,像平常开发中常用的观察者模式,工厂模式,单例模式等等,也有我们常常会了解到的spring中常用的一些设计模式例如单例模式,工程模式,模板模式,监听者模式,策略模式等等,今天在实际项目中遇到一个模板模式的实际运用,想做一个学习记录。

   模板方法设计模式:是一种行为型设计模式,它定义了一个算法的框架,并允许子类实现其中的具体步骤,在模板方法设计模式中,算法的整体结构在父类中定义,但是具体的步骤实现延迟到子类中。

 总结模板方法设计模式中的主要角色:

1.抽象类(Abstract Class):抽象类定义了算法的框架,其中包含一个或多个抽象方法和模板方法。抽象方法用于延迟到子类实现的具体步骤,而模板方法定义了算法的框架,其中包含一系列的步骤,这些步骤可以是具体方法或抽象方法。

2.具体类(Concrete Class):具体类是抽象类的子类,它实现了抽象方法,完成算法的具体步骤。

具体实现过程

1.定义抽象类
/*** 打印机抽象类*/
public abstract class Printer {/*** <p>* 查询订单打印状态* </P>** @param orderId 订单id* @return String*/public abstract boolean queryOrderState(String orderId);
}
2.具体实现类
@Slf4j
public class FeyPrinter extends Printer {@Overridepublic boolean queryOrderState(String orderId) {return true;}
}

 
/*** 芯烨云打印机*/
@Slf4j
public class XyyPrinter extends Printer {@Overridepublic boolean queryOrderState(String orderId) {return true;}}

/*** <p>* 易联云打印机* </P>* @since 2023/03/22*/
@Slf4j
public class YlyPrinter extends Printer {@Overridepublic boolean queryOrderState(String orderId) {return true;}
}
3.封装调用时候返回的实现对象
      Printer printer = PrinterStrategy.getInstance(deviceEntity.getBrandName());
package com.hkj.printer;import org.apachemons.lang3.StringUtils;import java.util.HashMap;
import java.util.Map;public class PrinterStrategy {private static final Map<String, Printer> printerMap = new HashMap<>();private PrinterStrategy(){}static {printerMap.put("易联云", new YlyPrinter());printerMap.put("芯烨云", new XyyPrinter());printerMap.put("飞鹅云", new FeyPrinter());
//        printerMap.put("佳博云", new JbyPrinter());}public static Printer getInstance(String brand){if(StringUtils.isBlank(brand) || !printerMap.containsKey(brand)){//默认取芯烨云return printerMap.get("芯烨云");}return printerMap.get(brand);}}

总结:

模板方法设计模式虽然有一些潜在的缺点,但它也有许多优点和好处。以下是使用模板方法设计模式的一些优点:

  1. 提供代码复用:模板方法设计模式将通用的算法步骤定义在模板类中,使得子类可以继承这些步骤而无需重复编写相同的代码,从而实现代码的复用。

  2. 封装不变部分:模板方法将算法中的不变部分封装在模板类中,这样可以确保这部分逻辑不受子类的影响,使得系统更加稳定和可靠。

  3. 提高代码可维护性:将算法的框架结构和具体步骤分开,使得代码的维护更加容易。如果需要修改算法的具体步骤,只需要修改子类而不影响其他部分。

  4. 促进代码的扩展性:虽然模板方法本身是固定的,但是通过子类的扩展,可以很容易地新增新的算法步骤,从而增加代码的扩展性。

  5. 遵循开放封闭原则:虽然在某些情况下需要修改模板类,但是对于新增的算法步骤,不需要修改模板类的源代码,符合开放封闭原则。

  6. 易于理解:模板方法设计模式使用了标准化的算法框架,使得代码结构清晰,易于理解和维护。

  7. 避免重复代码:通过将公共的算法步骤提取到模板类中,避免了多个子类中重复编写相同的代码,提高了代码的整体质量。

总体而言,模板方法设计模式适用于需要定义算法框架的情况,能够提高代码的可维护性和复用性。但是,在应用该模式时,需要根据具体的情况权衡其优缺点,并确保模板方法类和子类之间的关系合理,以充分发挥其优势。

本文标签: JAVA 中模板设计模式的运用