介绍
代理的定义为:为其他对象提供一种代理以控制这个对象的访问。
听说过某某某代理公司吧,这个代理和这里的代理模式是一个意思,这样就很容易理解了。
使用方式
public interface Project {
public void doSomething();
}
public class ProjectImpl implements Project{
@Override
public void doSomething() {
System.out.println("ProjectImpl doSomething");
}
}
public class ProjectProxy implements Project{
private Project mProject;
public ProjectProxy(Project project)
{
mProject = project;
}
@Override
public void doSomething() {
mProject.doSomething();
}
}
public class Main {
public static void main(String[] args) throws Exception {
Project project = new ProjectProxy(new ProjectImpl());
project.doSomething();
}
}
结果如下:
ProjectImpl doSomething
总结
有人说为嘛还搞个代理?直接调用ProjectImpl
控制不就行了吗?简单场景确实直接点更有效率,但考虑到以后工程庞大,需求扩展,代码的改动也会非常多,使用这个模式就可以让逻辑部分和实现剥离,通过一个代理来连接,这样即使以后需要更换ProjectImpl
也非常简单,直接修改代理就ok了,对原始逻辑不会有任何影响。
另外,还有一种动态代理,其实模式都是一样,只不过比上面的更灵活通用,但也必须结合不同的语言来实现。
在使用场景中:
public class Main {
public static void main(String[] args) throws Exception {
Project project = new ProjectProxy(new ProjectImpl());//产生直接联系
project.doSomething();
}
}
如上会产生直接联系,动态代理就是解除这种直接关系,在JAVA语言中利用反射来实现,单纯写入需要的代理名字就可以获取到想要的对象,从而实现解耦通用化。