欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

程序員過(guò)關(guān)斬將--你的面向接口編程一定對(duì)嗎?-創(chuàng)新互聯(lián)

程序員過(guò)關(guān)斬將--你的面向接口編程一定對(duì)嗎?

創(chuàng)新互聯(lián)主營(yíng)鳳陽(yáng)網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,App定制開(kāi)發(fā),鳳陽(yáng)h5小程序開(kāi)發(fā)搭建,鳳陽(yáng)網(wǎng)站營(yíng)銷推廣歡迎鳳陽(yáng)等地區(qū)企業(yè)咨詢

妹子開(kāi)始抱怨起來(lái)

業(yè)務(wù)背景

妹子的游戲是個(gè)對(duì)戰(zhàn)類的游戲,其中有一個(gè)玩家的概念,玩家可以***,這個(gè)業(yè)務(wù)正是妹子開(kāi)始撓頭的起點(diǎn)

第一次需求

產(chǎn)品經(jīng)理:玩家有很多屬性,例如:身高,性別 blalalala ,玩家可以***其他玩家。

YY妹子寫(xiě)程序也是很利索,一天就把程序搞定了,而且還抽象出一個(gè)palyer的基類出來(lái),堪稱高級(jí)程序員必備技能。

 //玩家的基礎(chǔ)抽象類
   abstract class Player
    {
        public string Name { get; set; }
        //.
        //.
        //.

        //玩家的***
       public abstract void Attack();
    }
    //真實(shí)玩家
    class PersonPlayer : Player
    {
        public override void Attack()
        {
            //to do something 
            return;
        }
    }

第二次需求

產(chǎn)品經(jīng)理:游戲里我需要增加機(jī)器人玩家來(lái)增加游戲在線的人數(shù),機(jī)器人屬性和真實(shí)玩家一樣,但是***不太一樣

這個(gè)需求修改還是難不住YY妹子,沒(méi)過(guò)幾天代碼改好了,增加了一個(gè)機(jī)器人玩家的類,用到了OO的繼承。在這里為玩家抽象類點(diǎn)贊

class RobotPlayer : Player
    {
        public override void Attack()
        {
            //修改***內(nèi)容等 to do something 
            return;
        }
    }

第三次需求

產(chǎn)品經(jīng)理:我要?jiǎng)?chuàng)建一批類似玩家的怪物,沒(méi)有真實(shí)玩家的那些屬性,但是和真實(shí)玩家一樣有***行為

這個(gè)時(shí)候YY妹子終于意識(shí)到***是一種行為了,需要抽象出接口來(lái)了。

 //***接口
    interface IAttack
    {
        void Attack();
    }
    //玩家的基礎(chǔ)抽象類
   abstract class Player
    {       
        //其他屬性代碼省略一萬(wàn)字
    }
    //真實(shí)玩家
    class PersonPlayer :Player, IAttack
    {
        public  void Attack()
        {
            //to do something 
            return;
        }
    }
    //機(jī)器人玩家
    class RobotPlayer :Player, IAttack
    {
        public  void Attack()
        {
            // to do something 
            return;
        }
    }
    //怪物玩家
    class MonsterPlayer : IAttack
    {
        public  void Attack()
        {
            // to do something 
            return;
        }
    }

到了這里,我們遇到了大家耳熟能詳?shù)拿嫦蚪涌诰幊蹋瑳](méi)錯(cuò),這個(gè)做法是對(duì)的。這也是設(shè)計(jì)的一大原則:程序依賴接口,不依賴具體實(shí)現(xiàn)。這里要為YY繼續(xù)點(diǎn)贊。順便說(shuō)一下,在多數(shù)情況下,很多同學(xué)就到此為止了

第四次需求

產(chǎn)品經(jīng)理:我現(xiàn)在要設(shè)計(jì)玩家的***方式了,目前有遠(yuǎn)程***,近程***,貼身***這三類,其他需求 blalalalala。

據(jù)說(shuō)此刻YY妹子的心里是一萬(wàn)頭羊駝飄過(guò)的狀態(tài)。這次要怎么設(shè)計(jì)呢?這也是菜菜要說(shuō)的重點(diǎn)部分。
現(xiàn)在我們需要靜下心來(lái)思考一番了,為什么我們使用了面向接口編程,遇到這次需求,程序還是需要修改很多東西呢?

設(shè)計(jì)原則:找出應(yīng)用中將來(lái)可能變化的地方,把他們獨(dú)立出來(lái),不需要和那些不變的代碼混在一起。

這樣的概念很簡(jiǎn)單,確是每個(gè)設(shè)計(jì)模式背后的靈魂所在。到目前為止,設(shè)計(jì)中不斷在變的是Attack這個(gè)接口,更準(zhǔn)確的應(yīng)該是Attack這個(gè)行為。面向接口這個(gè)概念沒(méi)有問(wèn)題,是大多數(shù)人把語(yǔ)言層面和設(shè)計(jì)層面的接口含義沒(méi)搞明白,真正的面向接口編程更偏向于面向架構(gòu)中行為的編程,另外一個(gè)角度也可以看做是利用OO的多態(tài)原則。

說(shuō)到這里,我們可以更系統(tǒng)的給Attack行為定義成一類行為,而具體的行為實(shí)現(xiàn)可以描述為一簇算法。想想看,Attack行為其實(shí)不止作用于player的類型,改日產(chǎn)品經(jīng)理新加一個(gè)XX對(duì)象也具有***行為,理想的情況是我只需要讓這個(gè)xx對(duì)象有Attack行為即可,而不需要改動(dòng)以前的任何代碼。你現(xiàn)在是不是對(duì)這個(gè)行為的定義理解的更深刻一些。

兩外一點(diǎn),到目前為止YY妹子的代碼中一直是以繼承的方式來(lái)實(shí)現(xiàn)行為,這會(huì)有什么問(wèn)題呢?假如要想在程序運(yùn)行時(shí)動(dòng)態(tài)修改player的Attack行為,會(huì)顯得力不從心了。

談到這里又引入了其他一個(gè)設(shè)計(jì)理念:一般情況下,有一個(gè)可能比是一個(gè)更好。具體概念為:多用組合,少用繼承。繼承通常情況下適用于事物本身的一些特性,比如:玩家基類具有姓名這個(gè)屬性,繼承類完全可以繼承這個(gè)屬性,不會(huì)發(fā)生任何問(wèn)題。而組合多用于行為的設(shè)計(jì)方面,因?yàn)檫@個(gè)行為類型,我可能會(huì)在多個(gè)事物中出現(xiàn),用組合能實(shí)現(xiàn)更大的彈性設(shè)計(jì)。

面向行為編程(千言萬(wàn)語(yǔ)不如10行.Net Core代碼)

封裝行為一簇
 //***行為接口
    interface IAttack
    {
        void Attack();
    }

    class RemoteAttack : IAttack
    {
        public void Attack()
        {
            //遠(yuǎn)程***
        }
    }
    class ShortAttack : IAttack
    {
        public void Attack()
        {
            //近程***
        }
    }
事物包含行為組合
 //玩家的基礎(chǔ)抽象類
    abstract class Player
    {       
        //其他屬性代碼省略一萬(wàn)字
    }
    //真實(shí)玩家
    class PersonPlayer : Player
    {
        //玩家可以有***的行為
        IAttack attack;
        public PersonPlayer(IAttack _attack)
        {
            attack = _attack;
        }

        public  void Attack()
        {
            //調(diào)用行為一簇算法的實(shí)現(xiàn)
            attack.Attack();
            return;
        }
        //玩家可以運(yùn)行時(shí)修改***行為
        public void ChangeAttack(IAttack _attack)
        {
            attack = _attack;
        }
    }

寫(xiě)在最后

接口是一種規(guī)范和約束,更高層的抽象更像是一類行為,面向接口編程只是代碼層體現(xiàn)的一種格式體現(xiàn)而已,真正的面向接口設(shè)計(jì)更貼近面向行為編程


添加關(guān)注,查看更精美版本,收獲更多精彩

程序員過(guò)關(guān)斬將--你的面向接口編程一定對(duì)嗎?

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)頁(yè)題目:程序員過(guò)關(guān)斬將--你的面向接口編程一定對(duì)嗎?-創(chuàng)新互聯(lián)
分享路徑:http://chinadenli.net/article24/cdocce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)網(wǎng)站設(shè)計(jì)靜態(tài)網(wǎng)站網(wǎng)站收錄網(wǎng)站制作App開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作