簡體   English   中英

在春天可以用枚舉實現策略模式嗎

[英]Is it possible to implement strategy pattern with enum in Spring

我正在嘗試使用Enum實現策略模式,但是我需要Service來處理我的每項任務。 我試圖將服務自動添加到Enum中,但它不起作用。 我搜索了一下“如何將豆子注入枚舉”,並給出了答案 (但是對我來說,它看起來並不優雅)。

我現在猶豫是否繼續,因為我不知道這是否是一個好方法。 我們是否有針對此類要求的面糊設計?

public enum TaskType {

    CREATE_MATERIAL{
        @Override
        public void handleTask(ScheduledEvent scheduledEvent) {
            service.createMaterial(scheduledEvent);
        }
    };


    @Autowired
    private static AService service;

    public abstract void handleTask(ScheduledEvent scheduledEvent);
}

您不能自動連接enum ,因為枚舉是Java運行時創建的常量,因此不能是Spring管理的Bean。

您需要將任何必需的值作為參數傳遞給方法。

public enum TaskType {

    CREATE_MATERIAL{
        @Override
        public void handleTask(AService service, ScheduledEvent scheduledEvent) {
            service.createMaterial(scheduledEvent);
        }
    };

    public abstract void handleTask(AService service, ScheduledEvent scheduledEvent);
}

如果不同的策略需要調用不同的服務,請停止使用enum

public interface TaskType {
    public abstract void handleTask(AService service, ScheduledEvent scheduledEvent);
}

@Component
public class CreateMaterial implements TaskType {

    @Autowired
    private static AService service;

    @Override
    public void handleTask(ScheduledEvent scheduledEvent) {
        service.createMaterial(scheduledEvent);
    }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM