国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Unity框架設(shè)計(jì):常用設(shè)計(jì)模式之代理模式

2023-01-04 18:06 作者:博毅創(chuàng)為  | 我要投稿


什么是代理模式

在代理模式(Proxy Pattern)中,一個(gè)類代表另一個(gè)類的功能。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式。它為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問, 在直接訪問對(duì)象時(shí)帶來的問題,比如說:要訪問的對(duì)象在遠(yuǎn)程的機(jī)器上。在面向?qū)ο笙到y(tǒng)中,有些對(duì)象由于某些原因(比如對(duì)象創(chuàng)建開銷很大,或者某些操作需要安全控制,或者需要進(jìn)程外的訪問),直接訪問會(huì)給使用者或者系統(tǒng)結(jié)構(gòu)帶來很多麻煩,我們可以在訪問此對(duì)象時(shí)加上一個(gè)對(duì)此對(duì)象的訪問層。

代理模式的優(yōu)點(diǎn)是用戶都基于代理來訪問服務(wù),使得背后的服務(wù)特性可以變得非常的靈活,也可以隨時(shí)可以替換服務(wù),用戶也不用管。

?

一個(gè)典型的設(shè)計(jì)案例了解代理模式

?

給大家上一個(gè)代理模式的典型的架構(gòu)與設(shè)計(jì)。比如我們要開發(fā)一個(gè)視頻播放器,視頻播放器會(huì)涉及很多的視頻格式的解碼,如h264, mp4, h263等。這個(gè)時(shí)候我們就可以做一個(gè)代理,代理,代理提供視頻播放器的解碼視頻數(shù)據(jù)的接口,用戶只要調(diào)用代理這個(gè)接口,就可以將編好的視頻數(shù)據(jù),變成原始的視頻數(shù)據(jù)。所以對(duì)于用戶而言,都是基于代理的,不用管是mp4, h264編碼。對(duì)于代理內(nèi)部而言,它會(huì)根據(jù)類型,來具體使用對(duì)應(yīng)的解碼器,實(shí)際上是代理包含了具體的視頻解碼器對(duì)象來完成對(duì)應(yīng)的解碼,但是對(duì)外的用戶不用管。如果有新的視頻解碼格式需要支持,那么只需要增加一個(gè)內(nèi)部的對(duì)象來處理就可以了,不用動(dòng)用戶的接口。如圖:

?

偽代碼可以這樣寫

public class VideoDecoderProxy { void RegisterVideoDecoder(int videoType, VideoDeoder decoder); void InitWithVideoType(int videoType); // 根據(jù)視頻的類型,初始化代理的具體解碼者 RawImage DecodeData(byte[] videoDatas); };

運(yùn)行啟動(dòng)的時(shí)候:

VideoDecoderProxy proxy; //代理對(duì)象 proxy. RegisterVideoDecoder(mp4Type, mp4Decoder); proxy. RegisterVideoDecoder(h264Type, h264Decoder); proxy. RegisterVideoDecoder(h263Type, h263Decoder);

… 如果擴(kuò)展了新的視頻格式,注冊(cè)一個(gè)就可以了;

//

當(dāng)播放器開發(fā)者來調(diào)用視頻解碼庫的時(shí)候,只要調(diào)用視頻解碼庫代理的接口,

proxy. InitWithVideoType(具體類型);

每一幀的視頻解碼調(diào)用 proxy. DecodeData(videoDatas);

這樣無論要支持多少總不同的視頻格式,播放器的邏輯都不用動(dòng),只要添加新的解碼庫就可以了。

?

代理模式在游戲開發(fā)中的使用

經(jīng)過上面的例子和偽代碼的講解,相信你對(duì)代理模式有了一個(gè)比較深刻的認(rèn)識(shí),接下來我們來分享一個(gè)代理模式在游戲開發(fā)設(shè)計(jì)中的經(jīng)典案例。當(dāng)我們開發(fā)網(wǎng)絡(luò)游戲的時(shí)候,我們的客戶端要與服務(wù)器進(jìn)行通訊,而服務(wù)器分布在云端的不同的機(jī)器上,同時(shí)隨著服務(wù)器部署的變化,我們也會(huì)要修改訪問服務(wù)器的方式和方法。一般做這類客戶端網(wǎng)絡(luò)設(shè)計(jì)的時(shí)候,我通常會(huì)采用代理模式,把云端的每個(gè)服務(wù)抽象成代理,比如用戶登錄AuthProxy, 系統(tǒng)商城的MallProxy, 邏輯服LogicProxy。這些Proxy提供對(duì)應(yīng)的服務(wù)的接口給上層的開發(fā)者來使用,如Connect, Login等,Proxy內(nèi)部來實(shí)現(xiàn)具體的部署和通訊細(xì)節(jié),比如AuthProx我們要連接哪里,游客登錄的具體通訊協(xié)議數(shù)據(jù)是什么等。通過代理,把與游戲服務(wù)器通訊部署等的變化與上層的業(yè)務(wù)邏輯分離出來。

這樣服務(wù)器的數(shù)據(jù)通訊變化,部署變化,不同的項(xiàng)目,都不會(huì)影響到上層的業(yè)務(wù)邏輯,只要修改服務(wù)器代理的配置就可以了。這樣做到了最大限度的靈活性,把變化的東西隔離開來。

本期的Unity游戲開發(fā)代理模式就講解到這里,關(guān)注我,繼續(xù)分享更多的設(shè)計(jì)模式

附:視頻教

https://www.bycwedu.com/promotion_channels/2146264125??


Unity框架設(shè)計(jì):常用設(shè)計(jì)模式之代理模式的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
沙田区| 东至县| 光山县| 天门市| 阜新市| 水富县| 万州区| 宁夏| 乌拉特前旗| 宁蒗| 黄浦区| 广元市| 库尔勒市| 松滋市| 青河县| 黑山县| 宜城市| 镇巴县| 房产| 新巴尔虎右旗| 会同县| 澄迈县| 马尔康县| 榆中县| 庆城县| 土默特右旗| 社旗县| 江永县| 潼关县| 康乐县| 丽江市| 新宾| 明星| 两当县| 贵德县| 泾源县| 龙陵县| 金阳县| 南乐县| 西乌珠穆沁旗| 济阳县|