返回首页 | 金赞娱乐场

合作共赢、快速高效、优质的网站建设提供商

更多精品源码-尽在织梦模板-www.moke8.com

网站开发署理形式

时间:2017-10-23 编辑:admin

有没有男生没有玩过网游的举手?

前阵子各大院线热映的《魔兽国际》勾起了笔者的回想,跟女友第一时刻去影院看了这场期待已久的游戏改编的大电影,当看到电影中呜哩哇啦叫着的“鱼人”的时分,影院里许多人都会意的笑了。当然,只要玩过魔兽国际这款游戏的人并且从新手村一路练级的玩家才知道鱼人的叫声意味着“风险”临近了,经常是刚跑到打怪地址,就被这群呜哩哇啦叫着的鱼人给群殴致死了,心里这个恨啊,只好复生,再跑一次。

游戏时断时续玩了几年,阅历“70年代”,“80年代”,“90年代”,人物等级上限不断提高,却很难再有最初的热情去玩去“闯练”国际了。

玩这个游戏的时分,是网易金赞真人娱乐署理的,玩家经过买游戏点卡的方法交换游戏时刻,那时分小卡15RMB,大卡30RMB,那时分玩家可以直接和其他RMB玩家用游戏内的金币买卖点卡,渐渐也呈现了G团,当然也少不了“代练”,尽管我们觉得这个游戏实在风趣味的当地恰恰在于晋级的进程,但快餐年代,一大批新手玩家涌入到游戏中,需求催生商场,大批的代练作业室也应运而生。

作为一个程序员,我们在魔兽国际的晋级进程如下图所示:

相同,作为一个程序员,我们还要用一段代码描绘我们在魔兽国际的痛苦的晋级进程:

 /// summary 
 /// 游戏者接口
 /// /summary 
 public interface IWOWPlayer
 void Login(string account, string password);
 void Killing();
 void Upgrade();
 /// summary 
 /// 游戏者
 /// /summary 
 public class WowPlayer : IWOWPlayer
 public string Name { get; private set; }
 public WowPlayer(string userName)
 this.Name = userName;
 public void Login(string account, string password)
 Console.WriteLine("咳咳,用户 {0} 用账号 {1} 登录了WOW", this.Name, account);
 public void Killing()
 Console.WriteLine("{0} 正在打怪,或许被怪打,不必你管!", this.Name);
 public void Upgrade()
 Console.WriteLine("哇塞,{0} 晋级了也!", this.Name);
 /// summary 
 /// 模仿场景
 /// /summary 
 class Program
 static void Main(string[] args)
 IWOWPlayer player = new WowPlayer("小白");
 player.Login("xiaobai", "123456");
 player.Killing();
 player.Upgrade();
 }

前面提到过,游戏中后来催生了许多代练作业室,快餐年代嘛,许多新手可能不像我们这样笨头笨脑的把杀怪、领会游戏中的美景,风趣的故事情节当作趣味;当然,也可能是学生借着假日来玩,时刻紧,来不及领会,所以,自然而然的就找到了代练,由他们帮着练级打怪。那么,代练的作业形式是怎样的呢?

作为一个程序员,嗯,你猜对了,我们又要画图了:

类图中,增加了一个Proxy类,用来代表代练,由于代练也是手动打怪,所以也要完结IWOWPlayer接口。

相同,作为一个程序员,哎呀,你又猜对了,我们要上代码了:

/// summary 
/// 代练者
/// /summary 
public class WOWPlayerProxy : IWOWPlayer
 public IWOWPlayer Player { get; private set; }
 /// summary 
 /// 结构挑选传入要代练的玩家
 /// /summary 
 /// param name="player" 玩家 /param 
 public WOWPlayerProxy(IWOWPlayer player)
 this.Player = player;
 /// summary 
 /// 代练用玩家账号登录
 /// /summary 
 /// param name="account" /param 
 /// param name="password" /param 
 public void Login(string account, string password)
 this.Player.Login(account, password);
 /// summary 
 /// 代练在打怪
 /// /summary 
 public void Killing()
 this.Player.Killing();
 /// summary 
 /// 代练晋级了
 /// /summary 
 public void Upgrade()
 this.Player.Upgrade();
}

修改后的场景如下:

/// summary 
/// 模仿场景2
/// /summary 
class Program
 static void Main(string[] args)
 IWOWPlayer player = new WowPlayer("小白");
 IWOWPlayer proxy = new WOWPlayerProxy(player); //实例化代练类,传入“小白”给其结构挑选
 proxy.Login("xiaobai", "123456"); //代练用小白的账号登录
 proxy.Killing(); // 代练在打怪
 proxy.Upgrade(); // 代练晋级了
}

看,新手现在现已不需求自己打怪了,当然晋级的趣味也领会不到了,全部关于晋级的全部都由代练包办了,只要把小白的账号交给代练就行了。

当当当! 署理形式 盛大上台!

Provider a surrogate or placeholder for another object to control access to it.
署理形式(Proxy Pattern)为其他目标供给一种署理以操控对这个目标的拜访。

署理形式通用类图如下:

Subject 笼统主题人物,类或接口 RealSubject 实在主题人物,被托付的人物,被署理的人物,事务逻辑的详细执行者 Proxy 署理,托付、署理人物,,担任对实在人物的运用

署理形式还有个奶名,叫“托付形式”,是不是很恰当?

署理形式是一项根本规划技巧。许多其他的形式,如状况形式,战略形式,拜访者形式本质上实在更特别的场合采用了托付形式,并且在日常的运用中,署理形式可以供给十分好的拜访操控。(出自)

依据通用类图完结的通用代码如下:

public interface ISubject
 void Request();
public class RealSubject : ISubject
 public void Request()
 throw new NotImplementedException();
public class ProxySubject : ISubject
 private ISubject Subject = null;
 public ProxySubject(ISubject subject)
 this.Subject = subject;
 public ProxySubject()
 this.Subject = new RealSubject();
 public void Request()
 this.Before();
 this.Subject.Request();
 this.After();
 private void Before()
 // 预处理
 private void After()
 //善后处理
}

通用完结代码中,我们加入了Before和After挑选,署理类可以在其间完结自己的逻辑如权限操控,引证计数等。这儿可以引进别的一个论题“面向方面的编程(AOP)”,有爱好的同学可以查找下,也可以重视我们的博客,今后另开篇幅详说。

一个署理类可以署理多个被托付者或被署理者。因而一个署理类详细署理哪个实在主题人物,是由场景类决议的。当然,最简略的状况就是一个主题类和一个署理类,这是最简练的署理形式。--出自

署理形式的运用场景 长途署理
比方网络服务,当我们们在项目中引进一个Web引证,我们们可以运用署理形式躲藏掉长途网络服务的一些细节,不管它在哪里,关于客户来说,就像是在操作本地目标一样; 虚拟署理
比方网页加载,网页中包含了很多的文字和图片,我们们可以很快的看到文字,但图片资源需求一张一张的下载后才干看到,那些未翻开的图片框,就是经过虚拟署理替换掉了真是的图片,此刻署理中存储了实在图片的地址和尺度; 安全署理
操控实在目标的拜访权限,多用于目标应该有不同的拜访权限的时分; 指针引证
是指当调用实在的目标时,署理处理别的一些事。比方核算实在目标的引证次数,这样当该目标没有引证时,可以主动开释它,或当第一次引证一个耐久目标时,将它装入内存,或是在拜访一个实践目标前,查看是否现已开释它,以保证其他目标不能改动它。这些都是经过署理在拜访一个目标时附加一些内务处理; 推迟加载
用署理形式完结推迟加载的一个比方就是运用发动时的数据加载,当加载的数据很大时,势必会影响用户体会,比方界面卡死,呈现大片空白等。运用署理形式,可以将运用发动时不需求用到的加载项推迟到运用时加载,然后削减资源占用,提高体系功率和用户体会。

以一个简略的演示来论述运用署理形式完结推迟加载的挑选及其含义。假定有一个操作数据库的运用,该运用发动时,需求初始化体系的全部类,其间包含测验树立数据库衔接。当然体系中还有其他耗时操作,比方操作XML文件的文件解析类等。全部这些初始化的操作叠加起来会使得运用的发动变得十分缓慢,可能用户还没有等你的运用初始化完结,就现已不耐烦的封闭了运用。这个时分,署理形式就派上用场了。运用署理形式封装对数据库查询中的初始化操作,当体系发动时,初始化这个署理类,而非实在的数据库查询类,而署理类直到实在的数据操作之前是什么都不会做的。因而其结构十分敏捷。

public interface IDbHelper
 string Request();
/// summary 
/// 实在的数据库操作类
/// /summary 
public class MySqlHelper : IDbHelper
 public MySqlHelper()
 //假定耗时的衔接操作
 System.Threading.Thread.Sleep(1000);
 public string Request()
 return "user request";
public class MySqlHelperProxy : IDbHelper
 public IDbHelper DbHelper { get; private set; } = null;
 public string Request()
 //只要在需求的时分才创立目标
 //这儿注意在多线程的环境下要考虑运用单例形式
 if (null == this.DbHelper)
 DbHelper = new MySqlHelper();
 return this.DbHelper.Request();
/// summary 
/// 模仿场景
/// /summary 
class ProxyPatternDemo
 static void Main(string[] args)
 IDbHelper dbHelper = new MySqlHelperProxy(); //运用署理
 dbHelper.Request(); //在实在运用时才创立实在的目标

署理形式的运用很广泛,是我们们最常用的规划形式之一,本文对署理形式的运用场景做了一些简略的介绍,期望可以协助我对署理形式有进一步的了解。

参阅:


浏览:

网站建设

流程

    网站建设流程