设计模式(八)代理模式(结构型)

简介:

概述            

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

抽象角色:声明真实对象和代理对象的共同接口;

代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。

真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。

类图  

1

代码 

IGamePlayer接口对游戏玩家进行抽象:

1 public interface IGamePlayer {
2     public void killBoss();
3     public void UpGrade();
4 }

 

GamePlayer实现IGamePlayer接口中的方法:

复制代码
 1 public class GamePlayer implements IGamePlayer {
 2     private String name = null;
 3     public GamePlayer(String name) {
 4         super();
 5         this.name = name;
 6     }
 7     @Override
 8     public void killBoss() {
 9         System.out.println(this.name+"正在killBoss");
10     }
11     @Override
12     public void UpGrade() {
13         System.out.println(this.name+"突然UpGrade");
14     }
15 }
复制代码

 

GamePlayerProxy是代理类:

复制代码
 1 public class GamePlayerProxy implements IGamePlayer {
 2     private IGamePlayer player = null;
 3     public GamePlayerProxy(IGamePlayer player) {
 4         super();
 5         this.player = player;
 6     }
 7     // 记录日志
 8     private void log() {
 9         System.out.println(new Date().toString() + "的时候在打怪");
10     }
11     @Override
12     public void killBoss() {
13         this.log();
14         player.killBoss();
15     }
16     @Override
17     public void UpGrade() {
18         player.UpGrade();
19         this.count();
20     }
21     private void count() {
22         System.out.println("升了1级");
23     }
24 }
复制代码

 

测试:

复制代码
1 public class Main {
2     public static void main(String[] args) {
3         IGamePlayer player = new GamePlayer("张三");
4         IGamePlayer proxy = new GamePlayerProxy(player);
5         proxy.killBoss();
6         proxy.UpGrade();
7     }
8 }
复制代码

 

优点                                                                                            

  • 职责清晰

真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。

  • 代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用。
  • 高扩展性

我是天王盖地虎的分割线         




本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3857245.html,如需转载请自行联系原作者

相关文章
|
Windows Python
Windows下pip设置国内源阿里云镜像加速
Windows下pip设置国内源阿里云镜像加速
5983 0
Windows下pip设置国内源阿里云镜像加速
|
10月前
|
搜索推荐 算法 NoSQL
用淘宝API优化商品推荐,让顾客一次买个够!
本文探讨如何利用淘宝开放平台API,结合关联规则、协同过滤与内容推荐算法,构建个性化商品推荐系统。通过挖掘用户行为与商品关联,优化购物车凑单、场景化组合推荐,提升转化率与客单价,实现“让顾客一次买个够”的智能推荐策略。
|
存储 人工智能 数据可视化
从需求到闭环:个人任务管理看板工具如何提升开发者每日效率?
现代人常陷入任务堆积、效率低下的困境。看板工具通过可视化任务状态、优先级排序和进度跟踪,为个人任务管理提供了高效解决方案。本文系统介绍了看板工具的核心原理(任务卡片、工作流)、主要功能(标签管理、多端同步)及主流产品对比(板栗看板、Notion等),并给出实用技巧:结合番茄工作法、定期复盘、避免任务堆积等。文章指出,看板不仅是工具,更是一种优化时间管理的思维方式,能有效减轻焦虑、提升生产力,适合学生、职场人士等各类人群。随着AI技术的发展,未来看板工具将更智能化,成为个人效率管理的得力助手。
502 0
|
自然语言处理 API 开发者
强强联合,开源中文DeepSeek-R1蒸馏数据集联合魔搭社区,一起来训练中文版推理模型!
近期,刘聪NLP开源了开源中文DeepSeek-R1(满血)蒸馏数据集包括SFT版本和普通版本,话不多说,先放数据下载链接。
1018 1
|
SQL 安全 网络安全
常见网站安全攻击手段及防御方法
【10月更文挑战第18天】随着互联网的发展,网站成为信息和服务的重要渠道,但也成为黑客攻击的目标。本文介绍了几种常见的网站安全攻击手段及其防御方法,包括SQL注入、XSS攻击、CSRF攻击、文件上传漏洞和DDoS攻击。通过使用参数化查询、HTML实体编码、CSRF令牌、文件类型验证和CDN服务等措施,可以有效提升网站安全性,确保其稳定运行。
660 10
|
Ubuntu Linux 网络安全
Linux系统通过fail2ban对暴力破解进行防护
Linux系统通过fail2ban对暴力破解进行防护
832 3
|
算法 应用服务中间件 图形学
贝叶斯推理导论:如何在‘任何试验之前绝对一无所知’的情况下计算概率
这篇文章探讨了贝叶斯推理的发展历史,从帕斯卡尔和费马的早期工作到托马斯·贝叶斯、皮埃尔-西蒙·拉普拉斯和哈罗德·杰弗里斯的贡献。文章指出,贝叶斯分析经历了从使用均匀先验到发展更为客观的方法,如杰弗里斯先验的过程。它讨论了费雪对逆概率的批评,以及贝叶斯方法在处理不确定性问题上的优势。文章还介绍了如何通过匹配覆盖率来评估先验分布的合理性,并通过几个例子展示了不同先验在二项分布和正态分布问题中的应用。最后,文章提出了贝叶斯分析在统计学中的地位,强调了在缺乏先验知识时建立良好先验的重要性,并讨论了主观性和客观性在统计推理中的角色。
613 1
|
负载均衡 网络协议 C#
C#实现WebSocket实时消息推送技术详解
C#实现WebSocket实时消息推送技术详解
1458 2
|
XML Java 数据格式
基于Java+freemarker实现动态赋值以及生成Word文档
使用Java和Freemarker技术实现动态数据填充到Word文档模板并生成新的Word文档。
1756 0
基于Java+freemarker实现动态赋值以及生成Word文档
|
网络协议 安全 网络性能优化
CCNA 200-301系列:TCP头
【4月更文挑战第21天】
727 9

热门文章

最新文章