博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【设计模式】代理模式:静态代理,动态代理,spring aop
阅读量:6223 次
发布时间:2019-06-21

本文共 1930 字,大约阅读时间需要 6 分钟。

代理模式分为静态代理和动态代理。我们拿链家来举例子,我们本人是真实的对象,有真实的业务需求:需要去找房子;链家是中介,是代理类,他来帮我执行找房子的这个操作。

静态代理:

  1.实现一个接口

public interface SearchHome {        public void search();}

  2.构建实现接口的委托类

public class Master implements SearchHome {    @Override    public void search() {        System.out.println("寻找房子");    }}

  3.构建代理类

public class HomeLink implements SearchHome{        private SearchHome sh;        public HomeLink(SearchHome sh) {        super();        this.sh = sh;    }    @Override    public void search() {        System.out.println("链家帮您找房子...");        sh.search();        System.out.println("链家帮您找到了...");    }}

  4.客户端:

public class Main {    public static void main(String[] args) {        SearchHome sh = new HomeLink(new Master());        sh.search();    }}

动态代理:

静态代理是代理类和委托类在java代码中绑定在一起,不方便管理。相比静态代理, 动态代理可以很方便的对委托类的方法进行统一处理。动态代理是在java代码运行时生成,动态代理又分为jdk动态代理和cglib动态代理。

  1.定义接口:

public interface SearchHome {        void search();    }

  2.定义委托类:

public class Master implements SearchHome {    @Override    public void search() {        System.out.println("寻找房子");    }}

  3.定义动态代理类

public class MyProxy implements InvocationHandler {        private Object target;        public MyProxy(Object target) {        super();        this.target = target;    }    public Object newInstance() {        return Proxy.newProxyInstance(this.getClass().getClassLoader(), this.target.getClass().getInterfaces(),this);    }    @Override    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {        Object result = null;        System.out.println("链家开始找...");        result = method.invoke(this.target, args);        System.out.println("链家开始找...");        return result;    }}

  4.main

public class Main {        public static void main(String[] args) {        SearchHome sh = (SearchHome) new MyProxy(new Master()).newInstance();        sh.search();    }}

 

转载于:https://www.cnblogs.com/lfdingye/p/7358108.html

你可能感兴趣的文章
git 命令
查看>>
Leap Motion API类库:KeyTapGesture
查看>>
搜狗输入法加入搜索引擎的新功能
查看>>
lucene之索引创建
查看>>
40个新鲜出炉的 jQuery 插件和免费教程【上篇】 转载自:梦想天空
查看>>
PL/SQL使用instantclient连接oracle配置
查看>>
进入有密码的windows系统
查看>>
HDU-1052 划水记录1
查看>>
我的友情链接
查看>>
【Spark 深入学习-08】说说Spark分区原理及优化方法
查看>>
PWA简介
查看>>
rsync同步服务器配置指南
查看>>
[Windows Azure] Building the web role for the Windows Azure Email Service application - 3 of 5
查看>>
Linux下源代码阅读工具
查看>>
【1】安装rabbitmq server
查看>>
我的友情链接
查看>>
Java 8学习之Lambda表达式
查看>>
Spring Batch
查看>>
C#未能加载类型
查看>>
SpringBoot自定义banner
查看>>