网站建设 齐鲁软件园,如何做推广网站,沈阳市网站建设报价,哪个网站能上传自己做的简历小谈设计模式#xff08;8#xff09;—代理模式 专栏介绍专栏地址专栏介绍 代理模式代理模式角色分析抽象主题#xff08;Subject#xff09;真实主题#xff08;Real Subject#xff09;代理#xff08;Proxy#xff09; 应用场景远程代理虚拟代理安全代理智能引用代… 小谈设计模式8—代理模式 专栏介绍专栏地址专栏介绍 代理模式代理模式角色分析抽象主题Subject真实主题Real Subject代理Proxy 应用场景远程代理虚拟代理安全代理智能引用代理总结 Java程序实现首先我们定义一个接口 Image表示图像对象的接口其次我们创建一个真实的图像类 RealImage实现 Image 接口表示真实的图像对象然后我们创建一个代理类 ProxyImage实现 Image 接口表示图像的代理对象最后我们可以使用代理对象来访问真实的图像对象例如输出结果程序分析 优缺点分析优点缺点总结 专栏介绍
专栏地址
link
专栏介绍
主要对目前市面上常见的23种设计模式进行逐一分析和总结希望有兴趣的小伙伴们可以看一下会持续更新的。希望各位可以监督我我们一起学习进步加油各位。
代理模式
代理模式是一种结构型设计模式它允许通过创建一个代理对象来控制对其它对象的访问。代理对象充当了被代理对象的接口客户端通过代理对象来访问被代理对象从而实现了对被代理对象的间接访问。
代理模式角色分析
抽象主题Subject
定义了代理对象和被代理对象的共同接口客户端通过抽象主题来访问被代理对象。
真实主题Real Subject
实现了抽象主题接口是被代理对象代理对象将对其进行间接访问。
代理Proxy
实现了抽象主题接口同时包含一个对真实主题的引用客户端通过代理对象来访问真实主题。
应用场景
远程代理
代理模式常用于网络通信中例如远程方法调用RPC。在分布式系统中客户端可以通过代理对象来调用远程服务器上的方法代理对象负责将调用请求发送到远程服务器并返回结果。远程代理隐藏了底层网络通信的细节使得客户端可以像调用本地方法一样调用远程方法。
虚拟代理
虚拟代理用于在访问对象时进行一些额外的处理。一个常见的例子是延迟加载Lazy Loading当一个对象的创建或加载非常耗费资源时可以使用虚拟代理来推迟对象的创建或加载直到真正需要访问对象时才进行。例如在图像加载时可以使用虚拟代理来延迟加载图像数据只有当需要显示图像时才真正加载图像数据。
安全代理
安全代理用于控制对对象的访问权限。例如在一个权限管理系统中可以使用安全代理来限制只有特定角色的用户才能访问某个对象。代理对象可以在访问真实对象前检查用户的角色如果用户具有访问权限则允许访问真实对象否则拒绝访问。 智能引用代理
智能引用代理用于在访问对象时添加一些额外的功能。一个常见的例子是缓存功能代理对象可以在访问真实对象前先检查缓存中是否存在对应的结果如果存在则直接返回缓存结果避免重复计算。另外还可以使用智能引用代理来实现对象池代理对象可以管理对象的创建和销毁并在访问对象时从对象池中获取对象。
总结
代理模式在许多实际应用中都有广泛的应用。通过引入代理对象可以实现对被代理对象的间接访问并可以在访问前后做一些额外的处理如网络通信、延迟加载、权限控制和功能扩展等。代理模式可以提高系统的灵活性和可扩展性同时也需要权衡系统的复杂性和性能。
Java程序实现
首先我们定义一个接口 Image表示图像对象的接口
public interface Image {void display();
}其次我们创建一个真实的图像类 RealImage实现 Image 接口表示真实的图像对象
public class RealImage implements Image {private String filename;public RealImage(String filename) {this.filename filename;loadFromDisk();}private void loadFromDisk() {System.out.println(Loading image from disk: filename);}public void display() {System.out.println(Displaying image: filename);}
}然后我们创建一个代理类 ProxyImage实现 Image 接口表示图像的代理对象
public class ProxyImage implements Image {private String filename;private RealImage realImage;public ProxyImage(String filename) {this.filename filename;}public void display() {if (realImage null) {realImage new RealImage(filename);}realImage.display();}
}最后我们可以使用代理对象来访问真实的图像对象例如
public class Main {public static void main(String[] args) {Image image new ProxyImage(test.jpg);// 第一次访问会创建真实的图像对象并显示image.display();// 第二次访问直接显示之前创建的真实图像对象image.display();}
}输出结果
Loading image from disk: test.jpg
Displaying image: test.jpg
Displaying image: test.jpg程序分析
在上面的示例中ProxyImage 类充当了代理对象它在访问真实的图像对象之前先进行了一些额外的处理。当第一次访问图像时代理对象会创建真实的图像对象并显示当第二次访问图像时代理对象直接显示之前创建的真实图像对象避免了重复加载和显示。通过代理对象我们可以实现对真实对象的间接访问并在访问前后做一些额外的处理。
优缺点分析
优点
代理模式可以实现对真实对象的间接访问可以在访问前后做一些额外的处理如权限控制、延迟加载、缓存等。 代理对象可以隐藏真实对象的具体实现细节保护真实对象的安全性。 代理模式可以提高系统的灵活性和可扩展性可以在不修改真实对象的情况下增加新的代理对象。 代理模式符合单一职责原则可以将真实对象和代理对象分离分别负责各自的功能。
缺点
由于引入了代理对象会增加系统的复杂性增加了代码的数量和维护的难度。 代理模式会引入额外的开销因为需要通过代理对象来访问真实对象可能会导致性能下降。 如果代理对象的创建和销毁过程比较复杂可能会影响系统的性能。
总结
代理模式在许多实际应用中都有广泛的应用可以提供额外的功能和保护真实对象的安全性。但是在使用代理模式时需要权衡系统的复杂性和性能确保代理对象的创建和销毁过程不会影响系统的性能。