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

设计模式之代理模式

代理模式的概念

为其他对象提供一个代理以控制对这个对象的访问

代理模式通常用于:
        控制访问:在访问目标对象之前进行一些额外的操作(如权限验证)。
        远程代理:为一个位于不同地址空间的对象提供一个本地代理。
        虚拟代理:通过先处理一个简单的对象来延缓真实对象的创建。
        保护代理:为不同的用户群提供不同级别的访问权限。

举个栗子:

用户想听明星唱歌,用户通过代理找到明星,代理安排明星唱歌的场地,用户来到场地,明星唱歌。

流程

用户想听歌===>代理===>收钱===>安排场地==>明星来唱歌===>清理场地

代码实现

创建明星类

package org.xiji.proxy;/*** 唱歌明星*/
public class Star {public void sing(){System.out.println("明星正在唱歌");}
}

创建明星代理类

package org.xiji.proxy;/*** 明星代理*/
public class StarProxy {private Star star;/**** 构造函数*/public StarProxy(Star star){this.star = star;}public void sing() {pay();System.out.println("==========================================");arrange();System.out.println("==========================================");System.out.println("开始唱歌");star.sing();System.out.println("结束唱歌");System.out.println("==========================================");clean();}/*** 收钱*/public void pay(){System.out.println("收钱");}/*** 安排场地*/public void arrange(){System.out.println("安排场地");}/*** 打扫场地*/public void clean(){System.out.println("打扫场地");}}

创建用户类

package org.xiji.proxy;public class Users {StarProxy starProxy;/*** 找代理* @param starProxy*/public void findStarProxy(StarProxy starProxy){this.starProxy = starProxy;}public void listen(){this.starProxy.sing();}}

代理模式测试类

package org.xiji.proxy;/*** 代理模式*/
public class proxyMain {public static void main(String[] args) {//明星Star star = new Star();//明星===>明星代理System.out.println("明星找代理");StarProxy starProxy = new StarProxy(star);//想听歌了===》直接找代理完事了Users xiji = new Users();//小久想听歌了==>找到代理System.out.println("小久想听歌");xiji.findStarProxy(starProxy);//开始听歌xiji.listen();}
}

执行结果


http://www.mrgr.cn/news/14431.html

相关文章:

  • JavaScript中闭包详解+举例,闭包的各种实践场景:高级技巧与实用指南
  • 数据结构——栈和队列
  • 用QT写一个加载模板文件,替换关键字为实际值
  • 《黑神话悟空》:国产3A游戏的崛起与AI绘画技术的融合
  • Unity实战案例 2D小游戏HappyGlass(游戏管理类脚本)
  • 引擎切换pdf识别简历分析
  • HTTP的通讯流程
  • 群晖NAS本地使用Docker搭建Home Assistant智能家居平台与远程访问
  • 贪心算法三道经典题(买卖股票,分发饼干)
  • 300W才能开通,A股自动交易公平吗?散户如何实现程序化交易?|邢不行
  • 【STM32】IIC
  • 深入理解 Go 语言并发编程--管道(channel) 的底层原理
  • 2024.8.29 作业
  • 【准则化的思想】绝对充分度
  • 探索 Linux 内核启动过程
  • 爬取数据时,如何避免违法问题
  • 使用ddns-go实现自动配置IPv6的DDNS
  • 数据库(专业存储数据)
  • 【工具使用】clang++踩坑记录
  • mac系统下Java环境安装