只有我有寫過使用策略模式+工廠模式的形式,其中工廠模式負責策略的分發。但是有個問題就是工廠模式中依然避免不了通過if else來判斷需要返回哪種策略,下面就通過自定義註解的形式來實現策略模式的分發。
1.定義策略的列舉類
public enum processtypeenum
2.定義乙個註解來表示策略是哪種型別
@target()
@retention(retentionpolicy.runtime)
@documented
@inherited
public @inte***ce type
3.定義策略類的頂層介面
public inte***ce processstrategy
4.定義具體的策略類
@slf4j
@component
@type(processtypeenum.chat_msg)
public class chatprocessstrategy implements processstrategy
}
@slf4j
@component
@type(processtypeenum.sys_msg)
public class sysprocessstrategy implements processstrategy
}
5.實現分發的邏輯
@component
public static final mapcontainer = new hashmap<>();
@override
container.put(entryset.getvalue().getclass().getannotation(type.class).value(), (processstrategy)entryset.getvalue()));
}}
6.實際呼叫
@data
public class msgcontent
@restcontroller
public class strategycontroller
}
通過註解的形式來實現策略模式的好處就是當我們需要新新增乙個策略時,直接加乙個具體的策略類,然後在列舉類裡面新增乙個列舉就可以了,比工廠模式要更加便捷。設計模式中對修改關閉,增加開放的原則。 基於自定義註解annotation 例項
1,自定義註解格式 target elementtype.method retention retentionpolicy.runtime public inte ce needjsonnullreplace2,註解實現類 public class jsonnullreplaceadvice els...
springboot AOP實現自定義註解新增驗證
1 新增pom.xml org.springframework.boot spring boot starter aop 2 新增註解類 自定義註解 用於驗證呼叫許可權 retention retentionpolicy.runtime target elementtype.method publi...
自定義註解 lock aop實現註解鎖
1 自定義的鎖註解 target retention retentionpolicy.runtime documented public inte ce servicelock2 aop切面 component scope aspect order 1 order越小越是最先執行,但更重要的是最先執...