设计模式:策略模式、工厂模式、模板模式混合使用

目录

这次我们利用模板模式固定下策略模式的骨架,工厂模式提供注册策略,获取策略的方法,提供一个三个设计模式的例子。

java 复制代码
abstract class Template{
        // 模板方法,定义了算法的骨架
    public void templateMethod() {
        System.out.println("执行模板方法的前置操作");
        Product product = createProduct();
        System.out.Printlin(product.toString);
        System.out.println("执行模板方法的后置操作");
    }

    // 工厂方法,由子类实现具体的产品创建
    protected abstract Product createProduct();
}


// 具体策略类1/子模板1
class StrategyImpl1 extends Template {

    @Override
    protected Product createProduct() {
        return "产品1";
    }
    
	@PostConstruct
	public void registryFactory(){
		Factory.CHOOSER_MAP.registry("1",this);
	}
}

// 具体策略类2/子模板2
class StrategyImpl2 extends Template {

    @Override
    protected Product createProduct() {
        return "产品2";
    }

	@PostConstruct
	public void registryFactory(){
		Factory.CHOOSER_MAP.registry("2",this);
	}
}

// 工厂接口
public class Factory {

    private final static Map<String, Strategy > CHOOSER_MAP = new ConcurrentHashMap<>();

    public static void registry(String code, Strategy strategy ) {
        CHOOSER_MAP.put(code, strategy );
    }

    public static Strategy chose(String code) {
		CHOOSER_MAP.get(code);
    }
}

// 测试类
public class Main {
    public static void main(String[] args) {
        StrategyImpl1  StrategyImpl1  = PlatformChooserFactory.chose("1");
        StrategyImpl1.templateMethod();

		StrategyImp2  StrategyImpl2  = PlatformChooserFactory.chose("2");
		StrategyImpl2.templateMethod();
    }
}

优缺点

  1. 灵活性:策略模式允许在运行时选择不同的策略,工厂模式可以根据需求创建相应的对象,模板模式定义了算法的骨架。这种组合可以使系统更加灵活,能够根据不同的需求选择合适的策略、对象和算法。
  2. 可扩展性:通过工厂模式,可以轻松添加新的具体产品,通过策略模式,可以添加新的策略,通过模板模式,可以添加新的算法实现。这使得系统更容易扩展,可以根据需要动态添加新的产品、策略和算法。
  3. 代码复用:策略模式、工厂模式和模板模式都鼓励代码的重用。策略模式中的策略、工厂模式中的产品和模板模式中的模板方法可以在不同的上下文中被重复使用,避免了重复编写相似的代码。
  4. 松耦合:策略模式、工厂模式和模板模式的结合可以实现松耦合的设计。策略模式通过接口与具体策略解耦,工厂模式通过抽象工厂与具体产品解耦,模板模式通过模板方法与具体算法解耦。这种松耦合设计使得系统更加灵活、可维护和可测试。

缺点:

  1. 增加复杂性:使用策略模式、工厂模式和模板模式的混合会增加代码的复杂性,需要定义多个接口、类和实现。这可能会增加开发和维护的成本。
  2. 增加类的数量:使用策略模式、工厂模式和模板模式的混合可能导致类的数量增加,特别是在有多个具体策略、产品和算法时。这可能会增加系统的复杂性和内存占用。

总结

需要根据具体的应用场景和需求来权衡使用策略模式、工厂模式和模板模式的混合。在某些情况下,这种组合可以提供更灵活、可扩展和可维护的设计,但也需要考虑代码复杂性和类的数量增加的影响。

相关推荐
萧瑟余晖4 小时前
JDK 26 新特性详解
java·开发语言
马优晨4 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
维天说7 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
Zane19948 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端
杨充9 小时前
11.DDD与战术建模
设计模式·开源·代码规范
杨充9 小时前
12.综合实战图片框架
设计模式·开源·代码规范
噢,我明白了9 小时前
java中Excel的导入和导出(EasyExcel)
java·开发语言·excel
吠品9 小时前
Zabbix Web界面误报Server未运行的排查与解决
java·服务器·数据库
啊湘9 小时前
天气查询API接口 按月Token鉴权 实时天气 物联网可用 文档齐全
java·后端·struts
Java内核笔记9 小时前
告别十亿美元的错误 : Spring Boot 4 空安全 (JSpecify) 实战
java·spring boot·后端