設計模式之代理模式


本文來自《設計模式之禪》。原文用java實現,這里改用c#來實現。

最近感覺很無聊,於是開始玩游戲消磨時間。在這段時間體會到網絡游戲的苦與樂。參與家族攻城,勝利后那叫一個樂啊,感覺自己像一個狂暴戰士,無往不勝。那苦是什么呢?就是升級,為了升一級,就要開始殺怪,自己做任務。變態的是那個游戲對外掛管理的非常的嚴格,基本上出個外掛,沒兩天就開始封號,不敢用。升級基本靠自己手打。接下來我們用架構的方式記錄下這段經歷。

 

游戲過程如上圖所示。
 
首先定義一個IGamePlayer接口,是所有喜歡網絡游戲的玩家的規范,然后定義一個具體的實現類GamePlayer,實現每個游戲玩家為了玩游戲要執行的功能。實現代碼如下。
 public interface IGamePlayer 
    {
        void Login(string userName,string passWord);

        void KillBoss();

        void UpGrade();
    }

非常的簡單,定義了三個方法,分別是登陸,打怪和升級。

其實現類代碼清單如下:

public class GamePlayer : IGamePlayer
    {
        private string name = "";

        public  GamePlayer(string name) 
        {
            this.name = name;
        }

        public void Login(string userName, string password)
        {
            Console.WriteLine(this.name+"login the system successfully ");
        }

        public void KillBoss()
        {
            Console.WriteLine(this.name + "is  killing boss now");
        }

        public void UpGrade()
        {
            Console.WriteLine(this.name + "has upgraded successfully ");
        }





}

場景類實現如下:

class Program
    {
        static void Main(string[] args)
        {
           IGamePlayer player = new GamePlayer("zhang san");

           Console.WriteLine("The start time is {0}",DateTime.Now);

           player.Login("zhang san","password");

           player.KillBoss();

           player.UpGrade();

           Console.WriteLine("The start time is {0}",DateTime.Now); 
           Console.Read();
        }
    }

運行結果是我們想要的,記錄着我們打怪升級的過程。但是人類對於喜悅是“趨利”性的,每個人都想happy,都不想讓苦難靠近,要想獲得幸福,苦難是在所難免的。游戲時間長了,腰酸背痛,眼睛干澀。。。。。。。

怎么辦?我們想玩游戲,但是不想經歷打怪的痛苦,又想獲得升級的快樂。有辦法,現在游戲代練的公司很多,找他們。於是我們讓他們去幫我們打怪。

我們來修改一下類圖。

 

 

 在類圖中我們增加了一個GamePlayerProxy類來代表游戲代練者,它也不能有作弊的方法啊。游戲代練者也是手動打怪,同樣需要繼承IGamePlayer接口。其實現code如下:

public class GamePlayerProxy : IGamePlayer
    {
        private IGamePlayer gamePlayer = null;

        public GamePlayerProxy(IGamePlayer gamePlayer) 
        {
            this.gamePlayer = gamePlayer;
        }

        public void Login(string userName, string password)
        {
            this.gamePlayer.Login(userName,password);
        }

        public void KillBoss()
        {
            this.gamePlayer.KillBoss();
        }

        public void UpGrade()
        {
            this.gamePlayer.UpGrade();
        }
    }

 

改進后的場景類code如下:

class Program
    {
        static void Main(string[] args)
        {
            IGamePlayer player = new GamePlayer("zhang san");

            IGamePlayer proxy = new GamePlayerProxy(player);

            Console.WriteLine("The start time is {0}", DateTime.Now);

            proxy.Login("zhang san", "password");

            proxy.KillBoss();

            proxy.UpGrade();

            Console.Read();
        }
    }

 

 運行結構也是我們所期望的。

你應該發覺了,你的游戲已經在升級,有人幫你干活了(當然你也付出了money)。終於升到120級。 這個就是代理模式。

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM