场景一
有位表演者平时都是在路边上卖艺的,突然他的表演能力被某一老板看上,把他带到一个剧院里,告诉他他只要照原来在路上表演的一样就可以,其他的事情不用管,待表演结束的时候,老板会给他一定的酬劳的。
这老板想利用这个表演者的表演来赚一笔钱。
就这样,一天的工作开始了。表演即将开始。
角色:
表演者: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()方法中,去修改其中的实现代码。
但里面也暴露出了一定的问题,难道我为了每一个方法进行处理,都需要另上一个代理执行类(剧院)来处理吗?这远远达不到我们想要的要求。在接下来的学习中,相信有更多的惊喜的实现方式。