面向方法编程AOP学习之二 —— “原始时代”
引言:
?????? 继前一章(面向方法编程AOP学习之一 —— 新知新觉)的对AOP的了解。
?????? 现有着进一步的体验AOP的实现方式,本节以简单的小例子,来感受AOP的一种体现。
?
场景制造:
场景一
???? 有位表演者平时都是在路边上卖艺的,突然他的表演能力被某一老板看上,把他带到一个剧院里,告诉他他只要照原来在路上表演的一样就可以,其他的事情不用管,待表演结束的时候,老板会给他一定的酬劳的。
???? 这老板想利用这个表演者的表演来赚一笔钱。
???? 就这样,一天的工作开始了。表演即将开始。
?
角色:
?
表演者:Player老板:Boss剧院:ProxyTheatre?
?
作用:
表演者(Player):
/** * 表演者,只会表演,不会赚钱 */public class Player implements IPlayer {@Overridepublic 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;}}?演出开始:
@Testpublic void testChat1() {ProxyTheatre proxy = new ProxyTheatre();proxy.setAudience(new Boss());proxy.setPlayer(new Player());proxy.perform();}?
演出过程演示:
?
shell many tickets player is singinggive a little money to player.?
类图:
? ? ? ? ? ? ? ? ? ? ? ?? ?? 
?
?
总结:
?????? 当然,这是一种简单的实现方式,从侧面反应出了AOP的一种思想,从告诉我们,在Player执行play()之前或之后,去处理相应的一些动作,而不需要Player的play()方法中,去修改其中的实现代码。
?????? 但里面也暴露出了一定的问题,难道我为了每一个方法进行处理,都需要另上一个代理执行类(剧院)来处理吗?这远远达不到我们想要的要求。在接下来的学习中,相信有更多的惊喜的实现方式。
?
下一节:
?????? 面向方法编程AOP学习之三 —— “进化论”