介绍
在软件开发中,设计模式是一种被广泛采用的方法,用来解决一下常见的设计问题,像平常开发中常用的观察者模式,工厂模式,单例模式等等,也有我们常常会了解到的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 {
@Override
public boolean queryOrderState(String orderId) {
return true;
}
}
/**
* 芯烨云打印机
*/
@Slf4j
public class XyyPrinter extends Printer {
@Override
public boolean queryOrderState(String orderId) {
return true;
}
}
/**
* <p>
* 易联云打印机
* </P>
* @since 2023/03/22
*/
@Slf4j
public class YlyPrinter extends Printer {
@Override
public boolean queryOrderState(String orderId) {
return true;
}
}
3.封装调用时候返回的实现对象
Printer printer = PrinterStrategy.getInstance(deviceEntity.getBrandName());
package com.hkj.printer;
import org.apache.commons.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);
}
}
总结:
模板方法设计模式虽然有一些潜在的缺点,但它也有许多优点和好处。以下是使用模板方法设计模式的一些优点:
-
提供代码复用:模板方法设计模式将通用的算法步骤定义在模板类中,使得子类可以继承这些步骤而无需重复编写相同的代码,从而实现代码的复用。
-
封装不变部分:模板方法将算法中的不变部分封装在模板类中,这样可以确保这部分逻辑不受子类的影响,使得系统更加稳定和可靠。
-
提高代码可维护性:将算法的框架结构和具体步骤分开,使得代码的维护更加容易。如果需要修改算法的具体步骤,只需要修改子类而不影响其他部分。
-
促进代码的扩展性:虽然模板方法本身是固定的,但是通过子类的扩展,可以很容易地新增新的算法步骤,从而增加代码的扩展性。
-
遵循开放封闭原则:虽然在某些情况下需要修改模板类,但是对于新增的算法步骤,不需要修改模板类的源代码,符合开放封闭原则。
-
易于理解:模板方法设计模式使用了标准化的算法框架,使得代码结构清晰,易于理解和维护。
-
避免重复代码:通过将公共的算法步骤提取到模板类中,避免了多个子类中重复编写相同的代码,提高了代码的整体质量。
总体而言,模板方法设计模式适用于需要定义算法框架的情况,能够提高代码的可维护性和复用性。但是,在应用该模式时,需要根据具体的情况权衡其优缺点,并确保模板方法类和子类之间的关系合理,以充分发挥其优势。