markdwon
## 代理模式释义
```text
通过一个代理将对象包装起来,然后用该代理取代原始对象,任何对原始对象
的调用都要通过代理
最好通过一个代理类完成全部的代理功能
```
## 代码示例
### 动态代理
```text
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyTest {
public static void main(String[] args) {
SubFactory subFactory = new SubFactory();
Factory proxyFactory = (Factory)ProxyFactory.getProxyFactory(subFactory);
proxyFactory.produce();
}
}
class ProxyFactory {
public static Object getProxyFactory(Object object){
Invocation invocation = new Invocation();
invocation.bind(object);
return Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(),invocation);
}
}
class SubFactory implements Factory{
@Override
public void produce() {
System.out.println("sub 生产产品");
}
}
class Invocation implements InvocationHandler{
private Object object;
public void bind(Object o){
this.object = o;
}
@Override
public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
o = this.object;
return method.invoke(o,objects);
}
}
interface Factory {
void produce();
}
```
### 静态代理
```text
public class ProxyTest {
public static void main(String[] args) {
SubFactory subFactory = new SubFactory();
ProxyFactory proxyFactory = new ProxyFactory(subFactory);
proxyFactory.produce();
}
}
class ProxyFactory implements Factory {
private Factory factory;
public ProxyFactory(Factory factory){
this.factory = factory;
}
@Override
public void produce() {
System.out.println("生产产品");
factory.produce();
}
}
class SubFactory implements Factory{
@Override
public void produce() {
System.out.println("sub 生产产品");
}
}
interface Factory {
void produce();
}
```
评论