小魔女 发表于 2015-1-16 22:24:06

ASP.NET编程:C#中的Adapter计划形式浅析

c语言的编译器,几乎是所有新平台都有的。因此从这点上看,c语言的程序,比其他任何语言更加容易跨平台。把一个类的接口变更成客户端所等候的另外一种接口,从而使底本接口不婚配而没法在一同事情的两个类可以在一同事情。企图
把一个类的接口变更成客户端所等候的另外一种接口,从而使底本接口不婚配而没法在一同事情的两个类可以在一同事情。
场景
假定收集游戏的客户端程序分两部分。一部分是和服务端通信的年夜厅部分,年夜厅部分供应的功效有道具购置、读取房间列表、创立房间和启动游戏程序。另外一部分就是游戏程序了,游戏程序和年夜厅程序固然属于一个客户端,可是由分歧的公司在举行开辟。游戏年夜厅经由过程完成商定的接口和游戏程序举行通信。
一入手下手的计划就是,年夜厅程序是基于接口体例挪用游戏程序启动游戏场景办法的。在年夜厅程序开辟靠近完成的时分,公司决意和别的一家游戏公司互助,因而但愿把年夜厅程序能合用另外一个游戏。而这个新游戏的遵守的是另外一套接口。是否是能够制止修正本来挪用办法来启动场景呢?也许你会说,既然只要一个办法修改,那末修正一下也不妨,我们假定年夜厅程序和游戏程序之间有100个接口,个中的年夜部分都有修正呢?由于游戏程序接口的修正,年夜厅程序大概要修正不止100个中央。如许接口的意义安在呢?
此时能够思索利用Adapter形式来适配这类接口的不婚配情形。
以下为援用的内容:
usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceAdapterExample{classProgram{staticvoidMain(string[]args){Lobbylobby=newLobby();lobby.CreateRoom("HalfPaper");lobby.StartGame();}}interfaceIGame{voidStartScene(stringsceneName);voidEnterPlayer(stringplayerName);}classLobby{privatestringsceneName;publicvoidCreateRoom(stringsceneName){this.sceneName=sceneName;}publicvoidStartGame(){IGamegame=newGameAdapter();game.StartScene(sceneName);game.EnterPlayer("yzhu");}}classGame{publicvoidLoadScene(stringsceneName,stringtoken){if(token=="Abcd1234")Console.WriteLine("Loading"+sceneName+"...");elseConsole.WriteLine("Invalidtoken!");}publicvoidEnterPlayer(intplayerID){Console.WriteLine("player:"+playerID+"entered");}}classGameAdapter:IGame{privateGamegame=newGame();publicvoidStartScene(stringsceneName){game.LoadScene(sceneName,"Abcd1234");}publicvoidEnterPlayer(stringplayerName){game.EnterPlayer(GetPlayerIDByPlayerName(playerName));}privateintGetPlayerIDByPlayerName(stringplayerName){return12345;}}}
能够看到,本来的接口中,启动游戏场景只必要一个参数,就是游戏场景名,而进进新的玩家必要供应玩家ID(新游戏都利用玩家ID而不利用玩家账户名)。
IGame接口就是适配器形式中的方针脚色,这是客户所等候的接口。也是针对老的游戏程序所遵守的接口。
Lobby类相称于挪用方大概客户,它本来的代码多是以下的:
以下为援用的内容:
Gamegame=newGame();
可是因为接口的改动,如今不克不及间接实例化游戏类,只能实例化适配器范例。固然仍是必要修改,可是这个修改是很小的,并且完整能够经由过程用静态加载程序集来打消这类修改。
GameAdapter类是适配器脚色,它是适配器形式的中心,用于把源接口变化为方针接口。在这里,我们看到,它完成方针接口。
Game范例是源脚色,大概说是必要适配的工具。也许它也遵守了别的一套接口,不外我们不是很体贴这个,因而代码中也没有表现。
利用了适配器形式后,客户端代码没有做甚么修正。客户端代码老厚道实的依附接口,它并没有错,假如因而依附工具的修正而必要年夜幅度修正就很无辜了,我们在适配器中把原本没有联系关系的两个接口适配在了一同。我们能够看到,适配器做的不单单是换一换办法名,假如源脚色和方针脚色的差别十分年夜,那末适配器必要做良多事情。
什么时候接纳
从代码角度来讲,假如你但愿分别庞大范例构建划定规矩和范例外部构成,大概但愿把不异的构建历程用于构建分歧范例的时分能够思索利用制作者形式。
从使用角度来讲,假如你但愿解耦产物的创立历程和产物的详细配件,大概你但愿为一切产物的创立复用一套不乱而且庞大的逻辑的时分能够思索利用制作者形式。
完成要点
适配器形式是不是能乐成使用的关头在于代码自己是不是是基于接口编程的,假如不是的话,那末适配器力所不及。
适配器形式的完成很复杂,基础的头脑就是适配器必定是遵守方针接口的。
适配器形式的变更对照多,能够经由过程承继和组合体例举行适配,适配器能够是一组适配器产物,适配器也能够是笼统范例。
适配器形式和Facade的区分是,前者是遵守接口的,后者能够是不遵守接口的,对照天真。
适配器形式和Proxy的区分是,前者是为工具供应分歧的接口,大概为工具供应不异接口,而且前者有一点后补的滋味,后者是在计划时就会使用的。
注重事项
在对两个有关类举行适配的时分思索一下适配的价值,一个十分复杂的适配器大概会对体系功能有影响。
有理由相信是能提供更出色的性能。很多平台无法支持复杂的编译器,因此需要二次编译来减少本地编译器的复杂度。当然可能做不到java编译器那么简易。

飘飘悠悠 发表于 2015-1-17 05:52:56

在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.ckuyun.com),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的

精灵巫婆 发表于 2015-1-20 14:08:49

平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。

小妖女 发表于 2015-1-29 08:43:52

可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。

兰色精灵 发表于 2015-2-6 00:07:51

主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。

只想知道 发表于 2015-2-14 12:18:58

ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。

变相怪杰 发表于 2015-3-4 06:16:08

弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。

老尸 发表于 2015-3-11 17:44:51

ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。

蒙在股里 发表于 2015-3-19 04:27:41

弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。

不帅 发表于 2015-3-27 08:07:37

大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。
页: [1]
查看完整版本: ASP.NET编程:C#中的Adapter计划形式浅析