代理模式
需求:每个明星都有经纪人,客户通过与经纪人进行交流签合同等,而明星只负责表演。
1.静态代理

代码实现:
//事务接口public interface Yan {void yuYue();void qianHeTong();void Yachu();void geiQian();}//明星类public class Star implements Yan{@Overridepublic void yuYue() {}@Overridepublic void qianHeTong() {}@Overridepublic void Yachu() {System.out.println("Star唱歌");}@Overridepublic void geiQian() {}}//代理类public class DaiLi implements Yan{private Star star ;public DaiLi(Star star) {this.star=star;}@Overridepublic void yuYue() {System.out.println("DaiLi预约");}@Overridepublic void qianHeTong() {System.out.println("DaiLi签合同");}@Overridepublic void Yachu() {star.Yachu();}@Overridepublic void geiQian() {System.out.println("DaiLi给钱");}}//测试类public class Test {public static void main(String[] args) {Star star = new Star();DaiLi da = new DaiLi(star);da.yuYue();da.qianHeTong();da.Yachu();da.geiQian();}}
静态代理总结:
优点:可以在不修改原对象的基础上进行拓展与拦截
缺点:因为都实现了相同的接口,不易于维护。
2.动态代理

代码实现:
//事务接口public interface Yan {void yuYue();void qianHeTong();void Yachu();void geiQian();}//代理类public class DaiLi implements Yan{@Overridepublic void yuYue() {System.out.println("DaiLi预约");}@Overridepublic void qianHeTong() {System.out.println("DaiLi签合同");}@Overridepublic void Yachu() {}@Overridepublic void geiQian() {System.out.println("DaiLi给钱");}}//明星类public class Star implements Yan{@Overridepublic void yuYue() {}@Overridepublic void qianHeTong() {}@Overridepublic void Yachu() {System.out.println("Star唱歌");}@Overridepublic void geiQian() {}}//handler类public class YanHandler implements InvocationHandler{private Star star;private DaiLi da;public YanHandler(Star star, DaiLi da) {super();this.star = star;this.da = da;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {if(method.getName().equals("Yachu")) {da.yuYue();da.qianHeTong();method.invoke(star, args);da.geiQian();}return null;}}//测试类public class Client {public static void main(String[] args) {Star star = new Star();DaiLi da = new DaiLi();YanHandler handlier = new YanHandler(star,da);Yan proxy=(Yan) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[] {Yan.class}, handlier);proxy.Yachu();}}
动态代理总结:
这样就可以把我们要重复做的逻辑抽出来,在handler里边统一控制。
3.AOP思想
aop是基于动态代理实现的把各个事务通过给单独抽出来,然后通过配置去寻找他的前置,后置,异常等方法。
文章转载自大学生IT学习之家,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




