代理模式(Proxy Parttern)为一个对象提供一个替身,来控制这个对象的访问,即通过代理对象来访问目标对象。本文将通过示例详细讲解一下这个模式,需要的可以参考一下
1.代理模式
当用户和某个对象打交道,但是程序可能不希望用户之间访问该对象,而是提供一个中间对象来和用户打交道。这个中间对象就被称为代理对象。这种模式被称为代理模式。
代理模式的特点:
代理对象和被代理对象实现相同的接口。
当用户需要访问某个方法时,首先是调用的代理的方法,代理可能要验证某些信息或检查它所代理的对象是否可用。如果可用,代理就会调用被代理对象同样的方法。
2.如何实现
1)定义一个接口,由代理和被代理对象共同实现。
2)被代理对象,实现接口定义的方法。
3)代理对象,实现接口定义的方法。代理对象要持有被代理对象的引用。
3.代码实现
1)定义共同的接口
/**
* 定义由代理和被代理所要实现的共同接口
*/
public interface CarInterface {
public abstract boolean hasCar(String name);
}
2)创建被代理对象
/**
* 被代理对象,负责正在的业务逻辑处理,幕后大Boss
*/
public class CarFactory implements CarInterface {
@Override
public boolean hasCar(String name) {
//做一些逻辑判断
return true;
}
}
3)代理实现
/**
* 代理对象
* 1.实现同一个接口
* 2.持有被代理对象的引用
*/
public class CarProxy implements CarInterface {
CarFactory factory ;
CarProxy(){
factory = new CarFactory();
}
@Override
public boolean hasCar(String name) {
//调用被代理对象的方法
return factory.hasCar(name);
}
}
4)测试代码
public class ProxyMain {
public static void main(String args []){
CarProxy shop = new CarProxy();
boolean hasCar = shop.hasCar("BYD");
System.out.println("hasCar "+hasCar);
}
}
4.拓展
在Android中我们调用getSystemService(string),拿到的对象,都是代理对象。最终都会通过Binder通信的方法,交给真正的SystemService进行处理,比如ActivityManagerService,WindManagerService等等。其实,这就行运用Binder跨进程通讯实现远程代理。这里不再赘述,后面会专门写文章进行讲解。
到此这篇关于Java代理模式的示例详解的文章就介绍到这了,更多相关Java代理模式内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:Java代理模式的示例详解
基础教程推荐
- 降序排序:Java Map 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01