ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Unity常用设计模式之代理模式

2021-12-17 13:03:45  阅读:166  来源: 互联网

标签:视频 解码 代理 模式 访问 Unity proxy 设计模式


什么是代理模式

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。它为其他对象提供一种代理以控制对这个对象的访问, 在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。

代理模式的优点是用户都基于代理来访问服务,使得背后的服务特性可以变得非常的灵活,也可以随时可以替换服务,用户也不用管。

一个典型的设计案例了解代理模式

给大家上一个代理模式的典型的架构与设计。比如我们要开发一个视频播放器,视频播放器会涉及很多的视频格式的解码,如h264, mp4, h263等。这个时候我们就可以做一个代理,代理,代理提供视频播放器的解码视频数据的接口,用户只要调用代理这个接口,就可以将编好的视频数据,变成原始的视频数据。所以对于用户而言,都是基于代理的,不用管是mp4, h264编码。对于代理内部而言,它会根据类型,来具体使用对应的解码器,实际上是代理包含了具体的视频解码器对象来完成对应的解码,但是对外的用户不用管。如果有新的视频解码格式需要支持,那么只需要增加一个内部的对象来处理就可以了,不用动用户的接口。如图:

伪代码可以这样写

public class VideoDecoderProxy {

void RegisterVideoDecoder(int videoType, VideoDeoder decoder);

void InitWithVideoType(int videoType); // 根据视频的类型,初始化代理的具体解码者

RawImage DecodeData(byte[] videoDatas);

};

运行启动的时候:

VideoDecoderProxy proxy; //代理对象

proxy. RegisterVideoDecoder(mp4Type, mp4Decoder);

proxy. RegisterVideoDecoder(h264Type, h264Decoder);

proxy. RegisterVideoDecoder(h263Type, h263Decoder);

… 如果扩展了新的视频格式,注册一个就可以了;

//

当播放器开发者来调用视频解码库的时候,只要调用视频解码库代理的接口,

proxy. InitWithVideoType(具体类型);

每一帧的视频解码调用 proxy. DecodeData(videoDatas);

这样无论要支持多少总不同的视频格式,播放器的逻辑都不用动,只要添加新的解码库就可以了。

代理模式在游戏开发中的使用

经过上面的例子和伪代码的讲解,相信你对代理模式有了一个比较深刻的认识,接下来我们来分享一个代理模式在游戏开发设计中的经典案例。当我们开发网络游戏的时候,我们的客户端要与服务器进行通讯,而服务器分布在云端的不同的机器上,同时随着服务器部署的变化,我们也会要修改访问服务器的方式和方法。一般做这类客户端网络设计的时候,我通常会采用代理模式,把云端的每个服务抽象成代理,比如用户登录AuthProxy, 系统商城的MallProxy, 逻辑服LogicProxy。这些Proxy提供对应的服务的接口给上层的开发者来使用,如Connect, Login等,Proxy内部来实现具体的部署和通讯细节,比如AuthProx我们要连接哪里,游客登录的具体通讯协议数据是什么等。通过代理,把与游戏服务器通讯部署等的变化与上层的业务逻辑分离出来。

这样服务器的数据通讯变化,部署变化,不同的项目,都不会影响到上层的业务逻辑,只要修改服务器代理的配置就可以了。这样做到了最大限度的灵活性,把变化的东西隔离开来。

本期的Unity游戏开发代理模式就讲解到这里,关注我,继续分享更多的设计模式

标签:视频,解码,代理,模式,访问,Unity,proxy,设计模式
来源: https://blog.csdn.net/voidinit/article/details/121993790

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有