当前位置: 首页 > news >正文

Java设计模式-结构性设计模式(代理设计模式)

简介

  为其他对象提供⼀种代理以控制对这个对象的访问,属于结构型模式。客户端并不直接调⽤实际的对象,⽽是通过调⽤代理,来间接的调⽤实际的对象

应用场景

  各⼤数码专营店,代理⼚商进⾏销售对应的产品,代理商持有真正的授权代理书客户端不想直接访问实际的对象,或者访问实际的对象存在困难,通过⼀个代理对象来完成间接的访问想在访问⼀个类时做⼀些控制,或者增强功能

在这里插入图片描述

角色

Subject

  抽象接⼝,真实对象和代理对象都要实现的⼀个抽象接⼝,好⽐销售数码产品

Proxy

  包含了对真实对象的引⽤,从⽽可以随意的操作真实对象的⽅法,好⽐ 代理加盟店

RealProject

  真实对象,好⽐⼚商销售数码产品

案例demo

xxxx想卖手机,为以后退休⽣活做准备,代理各⼤⼚商的⼿机和电脑,⽤代理设计模式帮他实现下

  Subject 卖⼿机RealProject 苹果、华为⼚商,核⼼是卖⼿机,但是选址不熟悉Proxy ⽼王数码专卖店:代理卖⼿机,附加选地址,增加⼴告等

抽取公共接口

/*** 抽取公共的方法*/
public interface DigitalSell {void sell();
}

真实对象

/*** 真实对象**/public class DigitalSellReal implements DigitalSell{@Overridepublic void sell() {System.out.println("销售华为手机");}
}

代理对象

/*** 代理对象,增加了功能**/public class DigitalSellProxy implements DigitalSell {private DigitalSell realObj = new DigitalSellReal();@Overridepublic void sell() {makeAddress();realObj.sell();makeAD();}private void makeAddress(){System.out.println("一个人流量很高的地址");}private void makeAD(){System.out.println("投放广告");}}

测试

public class Main {public static void main(String[] args) {//真实对象的行为DigitalSell realObj = new DigitalSellReal();realObj.sell();System.out.println("===");//代理对象的行为DigitalSell proxy = new DigitalSellProxy();proxy.sell();}
}

结果

销售华为手机
===
一个人流量很高的地址
销售华为手机
投放广告

优缺点

优点

  可以在访问⼀个类时做⼀些控制,或增加功能操作代理类⽆须修改原本的源代码,符合开闭原则,系统具有较好的灵活性和可扩展性

缺点

  增加系统复杂性和调⽤链路

与动态代理区别

  动态代理也有多种⽅式,cglib、jdk

和装饰器模式的区别

  保护⽬标对象增强⽬标对象,和装饰模式类似了
http://www.lryc.cn/news/162074.html

相关文章:

  • 线性空间、子空间、基、基坐标、过渡矩阵
  • 【MySQL】CRUD (增删改查) 基础
  • Socks5代理IP:保障跨境电商的网络安全
  • macOS通过钥匙串访问找回WiFi密码
  • Debian11之稳定版本Jenkins安装
  • kakfa 3.5 kafka服务端处理消费者客户端拉取数据请求源码
  • 【Linux】进程概念I --操作系统概念与冯诺依曼体系结构
  • BRAM/URAM资源介绍
  • 分享一个基于python的个性推荐餐厅系统源码 餐厅管理系统代码
  • Mysql5.7开启SSL认证且支持Springboot客户端验证
  • 微信小程序的页面滚动事件监听
  • 数据可视化:四大发明的现代转化引擎
  • HarmonyOS实现几种常见图片点击效果
  • 3D视觉测量:计算两个平面之间的夹角(附源码)
  • deepin V23通过flathub安装steam畅玩游戏
  • C语言是否快被时代所淘汰?
  • 简化转换器:使用您理解的单词进行最先进的 NLP — 第 1 部分 — 输入
  • C++多线程编程(第三章 案例2,条件变量,生产者-消费者模型)
  • Go语言使用AES加密解密
  • MAC ITEM 解决cd: string not in pwd的问题
  • 解决跨域的几种方式
  • 单片机-LED介绍
  • ERROR:GLOBAL_INITIALISERS: do not initialise globals to 0
  • 高德地图,绘制矢量图形并获取经纬度
  • 【100天精通Python】Day59:Python 数据分析_Pandas高级功能-多层索引创建访问切片和重塑操作,pandas自定义函数和映射功能
  • javaee springMVC 一个案例
  • Android T 窗口层级其三 —— 层级结构树添加窗口(更新中)
  • 【Linux】管道
  • postgre 12.11单实例安装文档
  • 使用LightPicture开源搭建私人图床:详细教程及远程访问配置方法