首先根据资料进行小的整理
我们所说的设计模式有23种,可以分为以下三大类:
创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。
结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。
行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备 忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
今天主要说一下代理模式:静态代理和动态代理
静态代理:由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件 就已经存在了。
步骤如下:
1、定义业务接口
2、被代理类实现业务接口
3、定义代理类并实现业务接口
4、通过客户端进行调用
代码如下: 定义业务接接口
被代理类实现接口
代理类实现接口
客户端调用
结果如下:
下面是动态代理:动态代理类:在程序运行时,运用反射机制动态创建而成。
步骤如下:
1、创建被代理的接口和类
2、创建 InvocationHandler接口的实现类,在invoke方法中实现代理逻辑
3、使用Proxy的newProxyInstance方法创建一个代理对象
4、使用创建出来的代理对象
用到的接口:InvocationHandler 用到的类:Proxy
步骤1与静态代理一致,这里不重复。
创建 InvocationHandler接口的实现类,在invoke方法中实现代理逻辑
使用Proxy的newProxyInstance方法创建一个代理对象
使用创建出来的代理对象,调用被代理类的方法,结果如下
综上所述:我们可以看到动态代理并没有提前创建出来相关的代理类及其对象,而是在程序运行时,而是通过反射,给Proxy.newProxyInstance()方法传入一个什么类型的接口,就会创建出一个对应的实现类及其对象,再通过InvocationHandler接口的实现类中的invoke()方法进行输出。
以上纯属个人见解,不足之处望见谅。