面向方法编程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();
}


演出过程演示 :
[quote]
shell many tickets
player is singing
give a little money to player.
[/quote]

类图:
[img]http://dl.iteye.com/upload/attachment/512947/80e7fbd3-0cb5-30d9-b182-3e48045d17d6.jpg[/img]

总结:
当然,这是一种简单的实现方式,从侧面反应出了AOP的一种思想,从告诉我们,在Player执行play()之前或之后,去处理相应的一些动作,而不需要Player的play()方法中,去修改其中的实现代码。
但里面也暴露出了一定的问题,难道我为了每一个方法进行处理,都需要另上一个代理执行类(剧院)来处理吗?这远远达不到我们想要的要求。在接下来的学习中,相信有更多的惊喜的实现方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值