亚洲 国产精品 日韩-亚洲 激情-亚洲 欧美 91-亚洲 欧美 成人日韩-青青青草视频在线观看-青青青草影院

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > unity游戲開發:責任模式

unity游戲開發:責任模式

來源:千鋒教育
發布人:wjy
時間: 2022-07-19 17:37:06 1658223426

  在開發游戲過程中,當玩家合成一種道具的時候,對于不痛的道具,需要的碎片個數,類型是不同的。用傳統的寫法,就是使用if...else...語句來判斷。如果后面,策劃修改了道具合成機制,我們就需要更改if結構判斷了,這就違背了設計模式原則中的對擴展的開發,對修改的關閉,為此,我們引入責任鏈模式。

  責任鏈模式(Chain of Responsibility Pattern)為請求創建了一個接收者對象的鏈。通常每個接收者都包含對另一個接收者的引用。如果一個對象不能處理該請求,那么它會把相同的請求傳給下一個接收者,依此類推。

unity游戲開發:責任模式

  1.抽象處理者(Handler):定義出一個處理請求的接口。如果需要,接口可以定義 出一個方法以設定和返回對下家的引用。

  2.具體處理者(ConcreteHandler):具體處理者接到請求后,可以選擇將請求處理掉,或者將請求傳給下家。由于具體處理者持有對下家的引用,因此,如果需要,具體處理者可以訪問下家。

  3.請求類(Request):處理者需要處理的請求信息;

  這里我們還是用上面的例子,使用責任鏈模式來實現獎品的分發機制。

//1.請求類,請求合成道具

    public class SyntheticRequest

    {

        /// 當前擁有的碎片數量

        public int DebrisNum{ get; set; }

        

        public SyntheticRequest(int num) 

        {

            this.DebrisNum= num;

        }

    }

//2.創建抽象角色類,可以通過合成得到的道具

    public abstract class Prop

    {

     //下一級道具,更低一級的道具

        public Prop NextProp{ get; set; }

        //當前道具類型

        public string PropType{ get; set; }

        //構造函數

        public Prop(string type)

        { this.PropType= type; }

 

        /// 該角色的執行行為

        public abstract void Behaviour(SyntheticRequest request);

    }

    //3.創建具體角色類

    public class Prop1:Prop

    {

        public Prop1(string type) : base(type) { }

 

        public override void Behaviour(SyntheticRequest request)

        {

            if (request.DebrisNum>= 1000)

            {

                Console.WriteLine("獲得{0},消耗{1}碎片", this.PropType,request.DebrisNum);

            }

            else if (NextProp != null)

            {

                Console.WriteLine("{0}個碎片不夠,只能合成更低一級的道具,即{1}", request.DebrisNum, NextProp.PropType);

                NextProp.Behaviour(request);

            }

        }

    }

///中級道具

    public class Prop2:Prop

    {

        public Prop2(string type) : base(type) { }

 

        public override void Behaviour(SyntheticRequest request)

        {

            if (request.DebrisNum>= 500)

            {

                Console.WriteLine("獲得{0},消耗{1}碎片", this.PropType,request.DebrisNum);

            }

            else if (NextProp != null)

            {

                Console.WriteLine("{0}個碎片不夠,只能合成更低一級的道具,即{1}", request.DebrisNum, NextProp.PropType);

                NextProp.Behaviour(request);

            }

        }

    }

///低級道具

    public class Prop3:Prop

    {

        public Prop3(string type) : base(type) { }

 

        public override void Behaviour(SyntheticRequest request)

        {

            if (request.DebrisNum>= 10)

            {

                Console.WriteLine("獲得{0},消耗{1}碎片", this.PropType,request.DebrisNum);

            }

            else if (NextProp != null)

            {

                Console.WriteLine("{0}個碎片不夠,只能合成更低一級的道具,即{1}", request.DebrisNum, NextProp.PropType);

                NextProp.Behaviour(request);

            }

        }

    }

//使用責任鏈模式

class Program

    {

        static void Main(string[] args)

        {

            //申請合成道具

            SyntheticRequest request= new SyntheticRequest(66);

            

            //對該活動的審批可能涉及的角色

            Prop prop1= new Prop1("高級道具");

            Prop prop2= new Prop2("中級道具");

            Prop prop3= new Prop3("低級道具");

 

            //設置責任鏈

            prop1.NextProp = prop2;

            prop2.NextProp = prop3;

 

            //合成處理

            prop1.Behaviour(request);

        }

    }

整合代碼

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace 責任鏈模式

{

//請求類,請求合成道具

    public class SyntheticRequest

    {

        /// 當前擁有的碎片數量

        public int DebrisNum{ get; set; }

        

        public SyntheticRequest(int num) 

        {

            this.DebrisNum= num;

        }

    }

 

//抽象角色類,可以通過合成得到的道具

    public abstract class Prop

    {

     //下一級道具,更低一級的道具

        public Prop NextProp{ get; set; }

        //當前道具類型

        public string PropType{ get; set; }

        //構造函數

        public Prop(string type)

        { this.PropType= type; }

 

        /// 該角色的執行行為

        public abstract void Behaviour(SyntheticRequest request);

    }

     

    ///高級道具

    public class Prop1:Prop

    {

        public Prop1(string type) : base(type) { }

 

        public override void Behaviour(SyntheticRequest request)

        {

            if (request.DebrisNum>= 1000)

            {

                Console.WriteLine("獲得{0},消耗{1}碎片", this.PropType,request.DebrisNum);

            }

            else if (NextProp != null)

            {

                Console.WriteLine("{0}個碎片不夠,只能合成更低一級的道具,即{1}", request.DebrisNum, NextProp.PropType);

                NextProp.Behaviour(request);

            }

        }

    }

///中級道具

    public class Prop2:Prop

    {

        public Prop2(string type) : base(type) { }

 

        public override void Behaviour(SyntheticRequest request)

        {

            if (request.DebrisNum>= 500)

            {

                Console.WriteLine("獲得{0},消耗{1}碎片", this.PropType,request.DebrisNum);

            }

            else if (NextProp != null)

            {

                Console.WriteLine("{0}個碎片不夠,只能合成更低一級的道具,即{1}", request.DebrisNum, NextProp.PropType);

                NextProp.Behaviour(request);

            }

        }

    }

///低級道具

    public class Prop3:Prop

    {

        public Prop3(string type) : base(type) { }

 

        public override void Behaviour(SyntheticRequest request)

        {

            if (request.DebrisNum>= 10)

            {

                Console.WriteLine("獲得{0},消耗{1}碎片", this.PropType,request.DebrisNum);

            }

            else if (NextProp != null)

            {

                Console.WriteLine("{0}個碎片不夠,只能合成更低一級的道具,即{1}", request.DebrisNum, NextProp.PropType);

                NextProp.Behaviour(request);

            }

        }

    }

 

//使用責任鏈模式

class Program

    {

        static void Main(string[] args)

        {

            //申請合成道具

            SyntheticRequest request= new SyntheticRequest(66);

            

            //對該活動的審批可能涉及的角色

            Prop prop1= new Prop1("高級道具");

            Prop prop2= new Prop2("中級道具");

            Prop prop3= new Prop3("低級道具");

 

            //設置責任鏈

            prop1.NextProp = prop2;

            prop2.NextProp = prop3;

 

            //合成處理

            prop1.Behaviour(request);

        }

    }

}

  優缺點

  優點:

  降低了請求的發送者和接收者之間的耦合;把多個條件判定分散到各個處理類中,使得代碼更加清晰,責任更加明確。

  缺點:

  在找到正確的處理對象之前,所有的條件判定都要執行一遍,當責任鏈過長時,可能會引起性能的問題;可能導致某個請求不被處理。

  總結

  代碼中存在多個if-else語句的情況下,此時可以考慮使用責任鏈模式來對代碼進行重構。

  更多關于“unity培訓”的問題,歡迎咨詢千鋒教育在線名師。千鋒教育多年辦學,課程大綱緊跟企業需求,更科學更嚴謹,每年培養泛IT人才近2萬人。不論你是零基礎還是想提升,都可以找到適合的班型,千鋒教育隨時歡迎你來試聽。

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
免费无码又爽又刺激高潮| 久久综合亚洲色HEZYO社区| 久久久久99精品成人片试看| 男阳茎进女阳道啪啪| 色欲人妻AAAAAA无码| 亚洲成A人一区二区三区| 中文字幕丰满伦子无码| 丁香花在线观看免费观看图片| 国产亚洲一区二区手机在线观看| 久久嫩草影院免费看| 日本XXXX色视频在线观看免费| 无码欧亚熟妇人妻AV在线| 一二三四在线视频观看社区| 波多野结衣一二三区AV高清| 国产做出在线 | 传媒麻豆| 乱码专区一卡二卡国色天香| 日韩人妻无码精品专区| 亚洲国产精品无码久久98蜜桃| AV夜夜躁狠狠躁日日躁| 国产乱子伦农村叉叉叉| 美女黄网站免费福利视频| 双腿高潮抽搐喷白浆视频| 亚洲色偷偷综合亚洲AV色欲 | 国模GOGO大尺度尿喷人体| 麻花传媒剧在线MV免费观看| 他揉捏她两乳不停呻吟人妻| 伊伊人成亚洲综合人网香| 丰满少妇被猛烈进入| 久久精品国产亚洲不AV麻豆| 日产精品乱码卡一卡2卡三网站 | GOGO全球高清大尺度视频| 国产网红无码精品视频| 逆徒每天都想着欺师犯上| 无码专区永久免费AV网站| 中文字幕日韩精品有码视频| 国产成人亚洲综合网站| 免费视频片多多视频免费高清| 玩弄CHINESE丰满人妻VI| 中文精品久久久久人妻不卡| 国产精品未满十八禁止观看| 女人的选择HD中字| 亚洲AV无码久久精品色欲| GAY引诱服务生COM2O22| 精品国产A∨无码一区二区三区 | 亚洲综合蜜臀AV| 国产成人久久AV免费看| 母与子之间的阴阳调和| 亚洲AV专区无码观看精品天堂 | 中国西西大胆女人裸体艺术| 国产麻花豆剧传媒精品免费 | JAPONENSISFES中国| 精品久久久久久无码专区| 日韩视频在线观看| 在我们寝室当寄吧套子怎么样| 国产美女精品自在线拍免费| 屁屁影院CCYY备用地址| 亚洲中文字幕精品久久久久久动漫| 高潮喷视频在线无码| 内射到高潮的H小说| 亚洲娇小被黑人巨大撑爆| 寡妇好丰满奶好大| 欧美精产国品一二三类产品 | 久久精品女人天堂AV麻| 五十老熟女高潮嗷嗷叫| 被猛男伦流澡到高潮H| 久久午夜伦鲁片免费无码| 亚洲2022国产成人精品无码区| 八戒网站免费观看视频| 老色鬼久久亚洲AV综合| 亚洲成AⅤ人的天堂在线观看女人| 多肉大尺寸小黄说说| 女人和拘做受全过程| 亚洲性夜夜综合久久7777| 国产精品久久无码不卡| 日本无遮挡真人祼交视频| 18禁又污又黄又爽的网站| 精品无码国产污污污在线观看| 天堂√中文最新版在线中文| JULIA无码中文字幕一区| 噜噜噜噜噜18禁私人影视| 亚洲狠狠婷婷综合久久久久图片| 国产精品高潮呻吟AV久久无码| 人妻少妇精品久久久久久| 中文字幕一本性无码| 久精品夜色国产亚洲AV| 性色AV无码久久一区二区三区| 国产JIZZJIZZ麻豆全部免| 人人妻人人澡人人爽欧美精品| 。国产精品麻豆成人AV网| 久久久久国产亚洲AⅤ麻豆| 亚洲AV网站在线观看| 国产成人AV无码精品| 日本亚洲色大成网站www久久| FREE国产粉嫩熟妇XXXHD| 蜜桃人妻一区二区三区| 亚洲综合无码一区二区三区不卡| 精品国产福利在线观看| 亚洲AV日韩AV高潮喷无码| 国产精品久久久久久成人影院| 色偷偷噜噜噜亚洲男人| 斑马视频电影免费观看| 欧美黑人又粗又大高潮喷水| 中文字幕AⅤ人妻一区二区| 久欠精品国国产99国产精2| 亚洲色噜噜噜噜噜噜国产| 精品无码国模私拍视频| 亚洲成AⅤ人的天堂在线观看女人| 国产午夜三级一区二区三| 无码人妻巨屁股系列大又挺拔 | 久久夜色精品国产噜噜| 亚洲一码和欧洲二码的尺码区别| 精品国产你懂的在线观看| 亚洲成av人在线观看| 激情内射亚洲一区二区三区爱妻 | 美女裸体无遮拦国产兔费网站 | 国产AV精品白浆一区二| 日韩电影久久久被窝网| 成人综合色在线一区二区| 日韩揉捏奶头高潮不断视频| 成人影院永久免费观看网址| 日韩精品一区二区三区在线观看L| 成 人 黄 色 网站 S色| 日韩精品一区二区三区在线观看L| 饭桌上故意张开腿让公在线观看| 日韩亚洲欧美精品综合| 国产9在线 | 欧洲| 无码精品国产一区二区三区免费 | 亚洲S久久久久一区二区| 极品JK撕破丝袜自慰喷水| 亚洲人妻无码一区二区| 巨胸喷奶水WWW视频网站| 中文国产成人精品久久| 女被啪到深处喷水GIF动态视频| CHINESE宅妇内射AV| 日本肉体裸交XXXXBBBB| 公车掀起老师裙子进入在线| 无码人妻精品一区二区三区下载| 国产又色又爽又刺激视频| 亚洲精品无码久久| 久久综合亚洲鲁鲁九月天| 91人妻人人做人碰人人爽九色| 欧美妆和日韩妆区别777CCC| 成熟交BGMBGMBGM在线| 乌克兰美女的小嫩BBB| 海角国精产品三区二区三区| 亚洲午夜无码片在线观看影院百度 | 啊灬啊灬啊灬高潮了听书最新章节| 色欲A∨无码蜜臀AV免费播| 国产精品无码一区二区三级| 亚洲国产精品久久久久网站 | 波多野结衣 片子| 特级毛片AAAAAA| 好大好湿好硬顶到了好爽视频| 一本色道久久88亚洲精品综合| 欧美激情内射喷水高潮| 肥胖BMGBMGBMG多毛图片| 亚洲AV成人精品五区| 久久无码国产专区精品| AE射频电源成色| 私人影院无在线码免费| 激情97综合亚洲色婷婷五| 在线VA无码中文字幕| 任你躁国产自任一区二区三区| 国产精品高潮呻吟爱久久AV无码| 亚洲精品无码久久久久| 男女狂进狂出动态图| 大荫蒂又大又长又硬又紧又粗| 亚洲AⅤ熟女五十路中出| 久久综合香蕉国产蜜臀AV| 波多野结衣AV无码| 亚洲AV无码麻豆一区二区三区| 美女裸露双奶头尿口无遮挡网站 | 初尝禁果稚嫩宫交H| 亚洲AV永久无码精品主页丝瓜| 满18岁夜里禁用100款APP| 成人欧美一区二区三区视频| 亚洲AV无码国产精品色午| 免费无码高潮喷水AⅤ片在线| 动性配人ⅩXXXX配| 亚洲精品无码不卡| 欧美最猛黑人XXXX黑人猛交3p| 国产精品特级毛片一区二区三区| 亚洲综合色区另类小说| 日本熟妇毛茸茸XXXX| 娇妻呻吟黑人又粗又大视频 | 全免费A级毛片免费看视频| 国产区精品福利在线社区| 中文激情在线一区二区| 双腿张开被9个男人调教| 久久精品露脸对白国产| 成人性生交大片免费看| 亚洲国产成人无码AV在线| 欧美最猛黑人XXXX黑人猛交9| 国内色母与进口色母区别| 777国产偷窥盗摄精品品在线| 小嫩模无套内谢第一次| 欧美嫩交一区二区三区| 国外亚洲成AV人片在线观看| JAPANESE国产中文在线观| 亚洲国产不卡久久久久久|