`
sammor
  • 浏览: 409538 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

面向方法编程AOP学习之二 —— “原始时代”

阅读更多

引言:

       继前一章(面向方法编程AOP学习之一 —— 新知新觉 )的对AOP的了解。

       现有着进一步的体验AOP的实现方式,本节以简单的小例子,来感受AOP的一种体现。

 

场景 制造

场景一

     有位表演者平时都是在路边上卖艺的,突然他的表演能力被某一老板看上,把他带到一个剧院里,告诉他他只要照原来在路上表演的一样就可以,其他的事情不用管,待表演结束的时候,老板会给他一定的酬劳的。

     这老板想利用这个表演者的表演来赚一笔钱。

     就这样,一天的工作开始了。表演即将开始。

 

角色:

 

表演者:Player
老板:Boss
剧院:ProxyTheatre 

 

作用:

表演者(Player):

/**
 * 表演者,只会表演,不会赚钱
 */
public class Player implements IPlayer {
	@Override
	public void play() {
		System.out.println("player is singing");
	}
}
 

老板(Boss):

package chat1;

/**
 * 很会赚钱的老板
 */
public class Boss {

	/**
	 * 卖票
	 */
	public void shellTickit() {
		System.out.println("shell many tickets ");
	}

	/**
	 * 给酬劳
	 */
	public void givePlayerMoney() {
		System.out.println("give a little money to player.");
	}

	/**
	 * 逃跑
	 */
	public void runAway() {
		System.out.println("The play is broken , the boss run away in a hurry");
	}
}
 

 

剧院(ProxyTheatre):

package chat1;

/**
 * 表演的地儿
 */
public class ProxyTheatre {

	private Boss boss;

	private Player player;

	/**
	 * 演出开始
	 */
	public void perform() {
		boss.shellTickit();
		try {
			player.play();
		} catch (Exception e) {
			boss.runAway();
		}
		boss.givePlayerMoney();
	}

	public void setAudience(Boss audience) {
		this.boss = audience;
	}

	public void setPlayer(Player player) {
		this.player = player;
	}

}
 

演出开始

@Test
	public void testChat1() {
		ProxyTheatre proxy = new ProxyTheatre();
		proxy.setAudience(new Boss());
		proxy.setPlayer(new Player());
		proxy.perform();
	}

 

演出过程演示

 

shell many tickets 
player is singing
give a little money to player.
 

类图:

                           

 

 

总结:

       当然,这是一种简单的实现方式,从侧面反应出了AOP的一种思想,从告诉我们,在Player执行play()之前或之后,去处理相应的一些动作,而不需要Player的play()方法中,去修改其中的实现代码。

       但里面也暴露出了一定的问题,难道我为了每一个方法进行处理,都需要另上一个代理执行类(剧院)来处理吗?这远远达不到我们想要的要求。在接下来的学习中,相信有更多的惊喜的实现方式。

 

下一节:

       面向方法编程AOP学习之三 —— “进化论”

  • 大小: 40.7 KB
2
8
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics