zoukankan      html  css  js  c++  java
  • 设计模式之代理模式

    转自

    http://www.cnblogs.com/cbf4life/archive/2010/01/27/1657438.html

    12.1 我是游戏至尊

          2007年,感觉很无聊,于是就玩了一段时间的网络游戏,游戏名就不说了,要不就有做广告的嫌疑,反正就是打怪、升级、砍人、被人砍,然后继续打怪、升级、打怪、升级······我花了两个月的时间升级到80级,已经很有成就感了,但是还被人杀死,高手到处都是,GM(Game Master,游戏管理员)也不管,对于咱这种非RMB玩家基本上都是懒得搭理。在这段时间我是体会到网络游戏的乐与苦,参与家族(工会)攻城,胜利后那叫一个乐呀,感觉自己真是一个“狂暴战士”,无往不胜!那苦是什么呢?就是升级,为了升一级,就要到出杀怪,做任务,那个游戏还很变态,外挂管得很严,基本上出个外挂,没了两天就开始封账号,不敢用,升级基本上都要靠自己手打,累呀!我曾经的记录是连着打了23个小时,睡觉在梦中还和大BOSS在PK。有这样一段经历还是很有意思,作为架构师是不是可以把这段经历通过架构的方式记录下呢?当然可以了,我们把这段打游戏的过程系统化,非常简单的一个过程,如图12-1所示。

    太简单了,定义一个接口IGamePlayer,是所有喜爱网络游戏的玩家,然后定义一个具体的实现类GamePlayer,实现每个游戏爱好者为了玩游戏要执行的功能。代码也非常简单,我们先来看IGamePlayer,如代码清单12-1所示。

    代码清单12-1 游戏者接口

    package proxymode;
    
    public interface IGamePlayer {
    	public void login (String user ,String password);
    	
    	public void killBoss();
    	
    	public void upgrade();
    }
    

      

      

     非常简单,定义了三个方法。

    public class GamePlayer implements IGamePlayer{
    	
    	private String name ="";
    	
    	public GamePlayer(String name ) {
    		this.name = name;
    	}
    	
    	public void login(String user, String password) {
    		// TODO Auto-generated method stub
    		System.out.println("登录名为"+ user+"的用户"+this.name+" login");
    	}
    
    	public void killBoss() {
    		// TODO Auto-generated method stub
    		System.out.println(this.name+" kill boss");
    	}
    
    	public void upgrade() {
    		// TODO Auto-generated method stub
    		System.out.println(this.name+" upgrade");
    	}
    
    }
    

      

    下面如果 我们用代理模式,则

    在类图中增加了一个GamePlayerProxy类来代表游戏代练者,它也不能有作弊的方法呀,游戏代练者也是手动打怪呀,因此同样继承IGamePlayer接口,其实现如代码清单12-4所示。

    package proxymode;
    
    public class GamePlayerProxy implements IGamePlayer {
    	
    	private IGamePlayer gamePlayer = null;
    	
    	//通过构造函数传递要对谁进行代练
    	public GamePlayerProxy (IGamePlayer gamePlayer){
    		this.gamePlayer = gamePlayer;
    	}
    	//下面的都是代练
    	public void login(String user, String password) {
    	
    		this.gamePlayer.login(user, password);
    	}
    
    	public void killBoss() {
    	
    		this.gamePlayer.killBoss();
    	}
    
    	public void upgrade() {
    		
    		this.gamePlayer.upgrade();
    	}
    
    }
    

      

    在Main中进行测试,如下

    IGamePlayer player= new GamePlayer("张三");
    		
    //定义一个代练   人
    GamePlayerProxy proxy = new GamePlayerProxy(player);
    		 
     //开始 打游戏
    System.out.println("开始 时间");
    proxy.login("zhangsan", "1234"); // proxy.killBoss(); // proxy.upgrade();
    System.out.println("结束时间");

      

  • 相关阅读:
    ASP.NET Razor
    ASP.NET Razor
    ASP.NET Razor
    ASP.NET Razor C# 和 VB 代码语法
    ASP.NET Razor 简介
    aspnet_regiis -i VS 20XX 的开发人员命令提示符
    web.config
    Java_Freemarker
    SQL SELECT INTO 语句
    SQL UNION 和 UNION ALL 操作符
  • 原文地址:https://www.cnblogs.com/chuiyuan/p/4113652.html
Copyright © 2011-2022 走看看