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 + -
显示快捷键?