一、概念
- 代理模式与装饰器模式差不多,都是结构型设计模式,也都是给对象添加功能[添加函数],但是还是有一些本质性区别的;
- 装饰器与代理的区别
- 相同点
- 解决问题的场景一样,都是解决函数的扩展问题。
- 不同点
- 装饰器在于功能的扩展;不替换原有的类功能,不控制原有类[装饰器可以和原有类一起存在];代理模式在于功能扩展,会代替原有的类功能,控制原有类[项目中只使用代理类,不能使用原有类];
- 相同点
二、场景
- 何时使用代理
- 新的功能,必须的
- 何时使用装饰器
- 新功能,非必须[可用,可不用]
三、实现
- 上传文件接口类,类名:IFileUpload
package com.ProxyPattern; public interface IFileUpload { void Upload(); } - 上传文件实现类,类名:FileUpload 继承 IFileUpload
package com.ProxyPattern; public class FileUpload implements IFileUpload { @Override public void Upload() { System.out.print("文件上传成功!"); } } - 文件上传代理类,类名:ProxyFileUpload 继承 IFileUpload
package com.ProxyPattern; public class ProxyFileUpload implements IFileUpload{ public IFileUpload fileUpload; @Override public void Upload() { //文件校验 FileCheck(); //文件上传 fileUpload.Upload(); } public void FileCheck() { System.out.print("文件校验成功!\n"); } } - 入口函数类,类名:Main
package com; import com.ProxyPattern.FileUpload; import com.ProxyPattern.ProxyFileUpload; public class Main { public static void main(String[] args) { ProxyFileUpload pfu = new ProxyFileUpload(); pfu.fileUpload = new FileUpload(); pfu.Upload(); } }
四、优缺点
- 优点
- 职责清晰。
- 高扩展性。
- 智能化。
- 缺点
- 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
- 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
本文详细介绍了代理模式和装饰器模式的概念、应用场景和实现方式。代理模式注重功能扩展并替代原有类,而装饰器模式则是在不改变原有类功能的基础上进行扩展。在需要控制或替换原有类功能时选择代理模式,当新功能是非必须时选择装饰器模式。通过示例代码展示了如何在Java中实现这两个模式。
10万+

被折叠的 条评论
为什么被折叠?



