设计模式 -- 代理模式(Proxy Pattern)

代理模式:一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。

介绍
  • 意图:为其他对象提供一种代理以控制对这个对象的访问。
  • 主要解决问题:在直接访问对象时带来的问题,直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。
  • 关键代码:实现与被代理类组合。
  • 优点:1、职责清晰。 2、高扩展性。 3、智能化。
  • 缺点:1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
示例

以绘制 三角形、圆形、矩形功能为例:

  1. 定义接口

    java 复制代码
    public interface Draw {
        void circularAction();
        void rectangleAction();
        void triangleAction();
    }
  2. 实现类

    java 复制代码
    public class RealDraw implements Draw {
        @Override
        public void circularAction() {
            //绘制圆形
        }
    
        @Override
        public void rectangleAction() {
            //矩形
        }
    
        @Override
        public void triangleAction() {
            //三角形
        }
    }
  3. 代理类

    java 复制代码
    public class ProxyDraw implements Draw {
        private RealDraw realDraw;
    
        @Override
        public void circularAction() {
            if(realDraw == null){
                realDraw = new RealDraw();
            }
            realDraw.circularAction();
        }
    
        @Override
        public void rectangleAction() {
            if(realDraw == null){
                realDraw = new RealDraw();
            }
            realDraw.rectangleAction();
        }
    
        @Override
        public void triangleAction() {
            if(realDraw == null){
                realDraw = new RealDraw();
            }
            realDraw.triangleAction();
        }
    }
  4. 使用

    java 复制代码
        public static void main(String[] args) {
            ProxyDraw proxyDraw = new ProxyDraw();
            proxyDraw.circularAction();
            proxyDraw.rectangleAction();
            proxyDraw.triangleAction();
        }
相关推荐
积水成江1 小时前
Vite+Vue3+SpringBoot项目如何打包部署
java·前端·vue.js·windows·spring boot·后端·nginx
CocoaAndYy2 小时前
ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal原理及Demo
java·jvm·算法
2401_857439693 小时前
SpringBoot在线教育平台:设计与实现的深度解析
java·spring boot·后端
总是学不会.3 小时前
SpringBoot项目:前后端打包与部署(使用 Maven)
java·服务器·前端·后端·maven
IT学长编程4 小时前
计算机毕业设计 视频点播系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·课程设计·毕业论文·计算机毕业设计选题·视频点播系统
一 乐5 小时前
英语词汇小程序小程序|英语词汇小程序系统|基于java的四六级词汇小程序设计与实现(源码+数据库+文档)
java·数据库·小程序·源码·notepad++·英语词汇
曳渔5 小时前
Java-数据结构-反射、枚举 |ू・ω・` )
java·开发语言·数据结构·算法
laocooon5238578865 小时前
java 模拟多人聊天室,服务器与客户机
java·开发语言
风槐啊5 小时前
六、Java 基础语法(下)
android·java·开发语言
苹果醋35 小时前
毕业设计_基于SpringBoot+vue的社区博客系统【源码+SQL+教程+可运行】41002
java·毕业设计·博客