设计模式之代理模式

本文来自《设计模式之禅》。原文用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级。 这个就是代理模式。

 
 
 

你可能感兴趣的:(设计模式)