前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将23种设计模式中的代理模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。
如果文章有什么需要改进的地方还请大佬不吝赐教。
小威在此先感谢各位大佬啦~~
个人主页:小威要向诸佬学习呀
个人简介:大家好,我是小威,一个想要与大家共同进步的男人
目前状况:24届毕业生,在一家满意的公司实习欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬
代理模式是一种常用的结构性设计模式,它可以在不改变原始对象的情况下,为对象提供一个代替者或占位符,以控制对原始对象的访问。
代理模式分为两种类型:静态代理和动态代理。静态代理是指代理类在编译时已经确定并实现,而动态代理是指代理类在运行时动态生成的。
在代理模式中,有三个角色:
抽象角色:定义了真实对象和代理对象的公共接口,这样在任何使用真实对象的地方都可以使用代理对象。
真实角色:代表了真实对象,是我们要使用的对象。
代理角色:代表了代理对象,它包含了一个指向真实对象的引用,从而可以操作真实对象。
代理模式有多种应用场景,其中最常见的是远程代理、虚拟代理和保护代理。
远程代理:可以隐藏一个对象存在于不同地址空间的事实,使得客户端可以像调用本地对象一样调用远程对象。
虚拟代理:可以延迟对象的创建,只有到真正需要使用对象的时候才会创建,这样可以节省系统资源,提高程序的运行效率。
保护代理:控制对真实对象的访问,可以在真实对象被访问前进行权限检查和过滤等操作。
总的来说,代理模式可以提高系统的安全性、稳定性和灵活性,适用于各种复杂场景下的开发需求。
以下是一个使用Java实现代理模式的例子:
首先,我们定义一个接口 Image,表示一个图片对象,其中 display() 方法用于显示图片。
public interface Image {
void display();
}
然后,我们实现一个具体的图片对象类 RealImage,其中 display() 方法用于加载并显示图片。
public class RealImage implements Image {
private String filename;
public RealImage(String filename) {
this.filename = filename;
loadFromDisk();
}
private void loadFromDisk() {
System.out.println("Loading " + filename);
}
public void display() {
System.out.println("Displaying " + filename);
}
}
接下来,我们创建一个代理对象类 ProxyImage,它持有一个 RealImage 对象,并在需要的时候才创建和加载该对象。
public class ProxyImage implements Image {
private RealImage realImage;
private String filename;
public ProxyImage(String filename) {
this.filename = filename;
}
public void display() {
if (realImage == null) {
realImage = new RealImage(filename);
}
realImage.display();
}
}
最后,我们可以通过以下方式来测试代理模式的实现:
public class ProxyPatternTest {
public static void main(String[] args) {
Image image = new ProxyImage("test.jpg");
image.display();
System.out.println();
// 第二次访问时,图片已经被加载过了,不再需要重新创建
image.display();
}
}
运行上述代码,输出如下:
Loading test.jpg
Displaying test.jpgDisplaying test.jpg
可以看到,在第一次访问时,代理对象创建了一个真实的图片对象,并调用其 display() 方法来加载并显示图片。在第二次访问时,代理对象直接调用真实的图片对象的 display() 方法,无需再去创建和加载图片。这样,代理模式就实现了对真实对象的访问控制和管理。
代理模式是一种常见的结构性设计模式,它通过引入代理角色来控制对真实对象的访问,从而增强了系统的安全性、稳定性和灵活性。代理模式分为静态代理和动态代理两种类型,应用场景包括远程代理、虚拟代理和保护代理等。
本期推荐书籍为《设计模式:可复用面向对象软件的基础(典藏版)》
业内知名的4人著作,本书是引导读者走出软件设计迷宫的指路明灯,凝聚了软件开发界几十年设计经验的结晶。
粉丝福利:评论区任意留言可参与活动抽奖(可评论最多五条,抽取三名欧皇)
京东自营购买链接:点击购买
好了,本篇文章就先分享到这里了,后续将会继续介绍23种设计模式之其他模式,感谢大佬认真读完支持咯~
文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论
希望能和诸佬们一起努力,今后我们顶峰相见
再次感谢各位小伙伴儿们的支持