前言 青春总是那样,逝去了才开始回味;大学生活也是在不经意间就溜走了,现在上班的时候,偶尔还会怀念大学时,大家在一起玩游戏的时光。大学喜欢玩游戏,但是可悲的校园网,速度能把人逼疯了;还好,后来搞了一个游戏代理,总算能勉勉强强的玩了两年。时至今日,敲起键盘写设计模式的时候,又想起了那些美好的时光。好了,这是一篇技术文章,而不是抒情怀旧的散文;思绪再回到这篇文章上来,游戏代理,是个什么东西,有了它就能让我们玩游戏的延迟立马下来了。今天,我并不会去总结游戏代理是如何实现的,重点是通过游戏代理这个例子来总结设计模式中的代理模式。 什么是代理模式? 在GOF的《设计模式:可复用面向对象软件的基础》一书中 代理模式是一种设计模式,它在《设计模式:可复用面向对象软件的基础》一书中被定义为:为其他对象提供一种代理以控制对该对象的访问。这种模式的主要目的是在不改变原有对象行为的情况下,增加额外的功能或者控制对原始对象的访问。 在游戏代理的例子中,代理服务器扮演了用户和游戏服务器之间的中介角色。由于游戏代理服务器的网络连接速度比用户直接通过校园网连接游戏服务器更快,因此它可以降低游戏延迟,提高用户体验。代理服务器实现了对游戏服务器的快速访问,这就是代理模式的一个实际应用。 代理模式有四种主要类型: 1. 远程代理:用于在不同地址空间的对象之间提供代理,比如分布式系统中的对象访问。 2. 虚代理:根据需要动态创建昂贵的对象,可以用于对象的延迟加载或资源的缓存。 3. 保护代理:控制对原始对象的访问权限,以确保只有具有足够权限的调用者才能操作。 4. 智能引用:智能指针的一种形式,它在访问对象时执行附加操作,如对象引用计数、对象的自动加载或锁定检查。 代理模式的UML类图通常包括三个主要角色:Subject(主题)接口,RealSubject(真实主题)实现Subject接口,而Proxy(代理)类同样实现Subject接口并持有对RealSubject的引用,从而能够调用RealSubject的方法并可能添加额外的处理逻辑。 在C++的代码实现中,通常会定义一个抽象基类Subject,包含一个纯虚函数Request。RealSubject继承自Subject并实现Request。Proxy类同样继承自Subject,它持有一个RealSubject的指针,在Request方法中先检查RealSubject是否已创建,如果未创建则创建,然后调用RealSubject的Request方法。这样,客户端代码可以通过Subject指针调用Request,而无需关心是RealSubject还是Proxy在处理请求。 代理模式在实际开发中广泛应用,例如在数据访问层,可以使用代理来实现缓存策略,减少数据库访问;在安全控制中,代理可以用于验证用户权限;在多线程环境中,代理可以实现对象的同步访问等。通过代理模式,我们可以灵活地扩展系统的功能,同时保持原有代码结构的清晰性和可维护性。
- 粉丝: 8
- 资源: 988
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0