observerbillingpolicy.aj
来自「designpatterns for aop」· AJ 代码 · 共 48 行
AJ
48 行
package designpatterns.observer.aspectj;import ca.ubc.cs.spl.aspectPatterns.patternLibrary.*;public aspect ObserverBillingPolicy extends ObserverProtocol { declare parents : Playable extends Subject; declare parents : BillingService implements Observer; pointcut titleUse(Playable playable) : this(playable) && ( execution(public void Playable+.play()) || execution(public void Song.showLyrics()) ); pointcut topLevelTitleUse(Playable playable) : titleUse(playable) && ! cflowbelow(titleUse(Playable)); public pointcut subjectChange(Subject subject) : topLevelTitleUse(Playable) && this(subject); public void updateObserver(Subject s, Observer o){ BillingService service = (BillingService)o; service.generateChargeFor((Playable)s); } //could be injected by a dependency injection //framework like Spring private BillingService defaultBillingService = new BillingService(); pointcut playableCreation(Subject s) : execution(public Playable+.new(..)) && this(s); after(Subject s) returning : playableCreation(s){ //could also look up service specific to user //or pull service from some environment addObserver(s, defaultBillingService); } //Similarly, the observing relationship could stop //based on the occurence of some join point pointcut stopObserving(Subject s); }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?