第八章设计AI时要区分其目标用户群_第1页
第八章设计AI时要区分其目标用户群_第2页
第八章设计AI时要区分其目标用户群_第3页
第八章设计AI时要区分其目标用户群_第4页
第八章设计AI时要区分其目标用户群_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

设计API时要区分其目标用户群8第八章

插件、客户端程序的区别:插件:插件是一种遵循一定规范的应用程序接口编写出来的程序。很多软件都有插件,插件有无数种。例如在IE中,安装相关的插件后,WEB浏览器能够直接调用插件程序,用于处理特定类型的文件。客户端程序:客户服务(CustomerService),是指一种以客户为导向的价值观,它整合及管理在预先设定的最优成本——服务组合中的客户界面的所有要素。广义而言,任何能提高客户满意度的内容都属于客户服务的范围之内。

一些程序功能不仅可以直接通过界面进行操作,还可以提供相应的API,以供其他程序来调用,这样第三方程序可以发起通讯,使用相应程序的API指使它完成操作,命令执行完后,控制权返回给调用者。

XMMS的API还提供插件支持,第三方可发商可以通过注册“输出插件”来扩展XMMS的功能。它与前面说的客户端的地位完全不同。第三方的播放场SPI组成:是与前面说的客户端的地位完全不同。它没有让XMMS进行任何操作。但它为XMMS增加了很多功能,所以此时的插件不是前文所说的“客户端”。XMMS的这种注册插件来扩展功能的方式是SPI(ServiceProviderInterface)的典型应用。ServiceProviderInterface为了说明客户端API和SPI区别,Voidxmms_play();Voidxmms_pause();Voidxmms_add_to_list(char*);使用Java语言来定义API的方式则完全不同。PublicclassXMMS{Publicvoidplay(){doPlay();}Publicvoidpause(){doPause();}PublicvoidaddToPlaylist(Stringfile){doaddToPlaylist(file);}}8.1C和Java语言中如何定义API和SPI(1)C和Java语言中如何定义API和SPI(2)在Java中声明API方式有多种。如说可使用static方法、实例方法、抽象方法、以及final方法,这些都是可以的。但编写一个SPI,情况就不同。如果要使用C语言来为XMMS编写程序一个插件的话,必须要写一个支持回放的函数,代码如下:Voidmy_playbackprints(char*text){Printf(“%s\n”,text);}InterfacePlayback{Publicvoidplayback(byte[]data);}ClassMyCallbackPrintsimplementsXMMS.Playback{Publicvoidplayback(byte[]data){System.out.println(newString(data));}}Xmms.registerPlayback(newMyCallbackPrints());C和Java语言中如何定义API和SPI(3)对于Java程序员,只要所编写的方法不是private、final或者static的,那么就表示该是方法支持调的,而且可以用看成是一个API。对很多程序员,甚至是教师都没有清楚地理解这一点,它也的确不是日常编码的内容。

8.2API演进不同于SPI演进(1)

具体的演进方案则还是取决于具体的接口类型:向API中添加一些内容总是可以的,但要移除一些内容则不行。但对于SPI,移除一些内容可以允许,但不允许添加新的内容。建立契约时,必须清楚地区分哪些是API,提供给外面调用,而哪些是SPI,用来让外部来扩展程序功能。设计时容易犯的最大错误就是将API和SPI混在一个类里。根据SPI的契约,不能添加方法,根据API的契约,也不能减少方法。

8.3java.io.Write这个类从JDK1.4到JDK5的演进还需要使用try/catch/finally的方式来进行防御性编码。Try{bufferedWrite.append(what);}catch(UnsupportedOpeartionExceptionex){bufferedWrite.write(what.toString());}这样来调用API的确有点怪。调用一个方法竟然要写四行代码java.io.Write的演进(2)假设已有一个优化过Write类,它无须将数据转换成字符串,而是直接处理以提高性能,但用户却可能无法用到这种梦寐以求的优化,PublicclassCountingWriteextendsWrite{Privateintcounter;PublicintgetcharacterCount(){Returncounter;}java.io.Write的演进(3)@OverridePublicvoidwrite(char[]cbuf,intoff,intlen)throwsIoException{Counter+=len;}@OverridePublicWriteappend(CharSepuencecsq)throwsIoException{Counter+=csq.length();Returnthis;}。

PrivatestaticfinalclassCDSequenceimplementsCharSequence{Privatefinalintstart;Privatefinalintend;PublicCDSequence(){This(0,647*1024*1024);}PrivateCDSequence(intstart,intend){

This.start=start;This.end=end;}Publicintlength(){Returnend-start;}}CountingWriterwriter=newCountingWriter();CDSequencecdImage=newCDSequence();BufferedWriterbufferedWriter=newBufferedWriter(writer);bufferedWriter.append(cdImage);assertEquals(“Correctnumberofwritesdelegated”,cdImage.length(),writer.getCharacterCount());从JDK1.4到JDK5的演进(4)这个通过覆盖来优化性能的方法却不会被调用,效率仍然没有提高。If(shouldBufferAsTheSequenceIsNotTooBig(csq)){Write(csq.toString());}else{Flush();Out.append(csq);}Returnthis;从JDK1.4到JDK5的演进(5)首先计算一下字符的数量,如果数量比较小,性能影响也比较小,就使用老的方式处理,否则就先写入当前数据后,再写入大数据。然而,还远远没有结束,还有一个潜在的问题需要解决。

PublicclassCryptoWriterextendsBufferedWriter{PublicCryptoWriter(Writerout){Super(out);}@OverridePublicvoidwrite(char[]buf,intoff,intlen)throwsIoException{Char[]arr=newchar[len];For(inti=0;i<len;i++){Arr[i]=encryptChar(buf[off+i]);}Super.write(arr,0,len);}从JDK1.4到JDK5的演进(6)@OverridePublicvoidwrite(intc)throwsIoException{Super.write(encryptChar©);}@overridePublicvoidwrite(Stringstr,intoff,intlen)throwsIoException{StringBuffersb=newStringBuffer();For(inti+0;i<len;I++){Sb.append(encryptChar(str.charAt(off+i)));}Super.write(sb.toString(),0,len);}PrivatecharencryptChar(intc){If(c==‘Z’){Return‘A’;}If(c==’z’){Return‘a’;}Return(char)(c+1);}}。从JD唉K1培.4到JD迎K5的演梢进(7集)事情孙变得阀越来屋越复宫杂了积!为川了处扭理含虚有大凳量字遮符串恢的对祝象等呈目的最,最较好是热直接缝将数暖据写侍入相地应的Wr想it扎er对象鸡。Bo川ol各ea谎n娘is铃Ov巾er心ri唐de座n棵=f渡al套se碎;Tr作y条{灭is贵Ov玩er吧ri臣de匠n=爽(万ge炉tC脾la较s(视).输ge采tM纠et具ho陵d(藏“寻wr利it拴e”哄,S恢tr巧in揉g.吩cl链as雁s).俯ge娇tD孤ec猪la敞ri顾ng贸Cl水as达s(陶)!良=W做ri撇te象r.典cl璃as爪s)腔||(g蠢et票Cl形as膏s(秩).们ge妈tM取et恳ho具d(昏“史wr伐it彩e”盐,i辟nt播eg遍er尾.T痛YP耐E查).姨ge右tD恩ec讨la讽ri欲ng灵Cl议as粥s寒!=咏Bu贪ff纷er感ed绕Wr泼it你er闻.c爽la泰ss棋)|列|(坟ge胸tC答la垒ss傍()馋.g诞et陵Me伤th穴od钞(寻“w贿ri碎te领”,姑St乞ri嚼ng撤.c龄la寄ss朱,I妻nt劈燕eg掀er煎.T烤YP懒E,裳In栋te童ge丢r.滩TY钓PE).完ge嗓tD愉ec般la淡ri蹈ng蝇Cl乳as平s(虹)!昼=B格uf胁fe叙re仓dW愈ri博te蜜r.婆cl摄as祝s落);}诊ca国tc勉h执(E灶xc轿ep但ti膜on咸e姥x){Th贵ro摘ws艘n脚ew柜I智oE罚xc遍ep惭ti辆on各(e疯x)垂;}If唱(案is休Ov倘er性ri太de坚n让||揪sh述ou敬ld悔Bu柏ff干er通As黎Th陷eS请eq辆ue捆nc辨eI缘瑞sN原ot四To击oB捧ig姨(c徐sq闲)){Wr给it勇e(芽cs荣q.山to徐St电ri斯ng漆()听);}醋el搏se喇{鬼F胞lu词sh饺()谣;闪Ou悉t.隙ap洽pe月nd肯(c累sq踢);喘}Re魄tu哲rn之t疮hi酒s;物}反射舰技术第三谦个版很本才殿是最加终的烈解决株方案物。它丢使用愤了反射没技术,所婚以看我起来室复杂啊一点量,但糕却是尊一个裳非常者有效源的解兵决方碰案。反射课技术让这当段代天码看垦起来仍不如月原来掏那么只漂亮泄了,习但至漠少它挖可以她正常件运行痛,结显果也葬是正绘确的竹。让一掩个类骆可以被动师继承,其眯实就慰意味夏着把物它当作挥一个SP遭I,因彩为其帖子类亭可以黑提共拿新技然术部槐的功管能,芝或者久说新悲的服树务,聪但对肝于代养理来净说,气它更供多是浙让其谈它的盆代码隆来进抽行调查用它案的功据能,恰属于逼功能AP业I,两堂者是叔不一母样。侮不能丘像表宰面看敢起来穗那么律简单第、顺误畅了伏。如何流避免士继承今(1)Pu市bl添ic箭f酸in歇al柏c掩la朴ss扣W拳ri焰te转r甘{Pr翠iv厦at乓e吐fi小na旁l肢Im楚pl鞭i倍mp枪l蚊;Pr醒iv午at斩e赚Wr仓it西er仿(I势mp眉l,笨im舱pl筋)割{腊Th坑is到.i俭mp铸l=膊im宝pl样;象}Pu它bl略ic旷f臣in言al洲v松oi割d示wr听it叮e(两in漂t露c)活t置hr画ow苏s异Io养Ex丛ce似pt假io顾n{核C糖ha封r[寺]净ar揉r=奶{恐(搅ch域ar崖)党c爽};惕I裕mp越l.缩慧wr壤it忙e(透ar斗r,叹0,朱1)横;孔}Pu免bl恩ic策f篇in遣al民v斤oi皆d秤wr伟it认e(顺ch蛋ar航c碎bu钢f[庭])拘t在hr所pw滋s蛋Io登Ex客ce归pt胳io糠n歇{豪I释mp熄l.架wr享it比e(钻cb糠uf暴,0锄,c麻bu漆f.后le号ng尺th损);修}Pu耀bl尿ic翼f福in置al照v奏oi找d食wr喝it窑e(剩ch虾ar却c坛bu构f[订],匀in川t尼of电f,旅in欲t弄le蜻n资)Th拳ro讯ws在I桥oE祖xc往ep柔ti色on渣{衬Im新pl筐.w忠ri酬te乒(c启bu刚f项,o疲ff锣,l胀en业);题}Pu振bl先ic姿f青in照al汉v截oi蚁d切wr闲it袋e(答St旋ri谷ng画s东tr件)扮th毫ro描ws立I如oE把xc淋ep死ti缸on澡{Im浩pl重.w稠ri壮te续(s还tr能,0迫,s哈tr龄.l鲜en饲gt评h(旺))握;}如何竹避免闭继承(2)Pu茄bl闹ic扁f描in池al站v获oi粗d贞wr值it弯e(伴St惹ri浩ng吉s哨tr馒,尚in运t仰of竹f,跌in态t始le辈n)Th希ro棉ws邮I遥oE柏xc旁ep庭ti妥on桨{按Im授pl贱.w炒ri批te犹(s蛙tr赵,o踏ff氏,l菌en耕);委}Pu孤bl招ic意f挂in秤al趋v亮oi堆d咱fl谋us采h(裁)妨th罚ro续ws枕I吉oE掠xc俱ep捆ti庙on{爆Im善pl寸.f秤lu横sh盘()赵;}Pu睁bl妹ic竟f剂in需al露v叠oi考d井cl械os董e(渴)餐th印ro婚ws舰I础oE浑xc泰ep狭ti向on{禽I寒mp陵l.卷cl密os懒e(夸);孕}SP为I的提班供者饮类(1)现在意写一椒个SP盛I的提眼供者秘类,纸这个评类中键全部屡都是财工厂侍方法范,用文来提砌供Im裕pl接口悲的具变体实貌现,挣基本闯上就风是下浊面这劳个样宫子。Pu泻bl恒ic毕s婚ta前ti听c勿Wr穴it浩er挡cr末ea撒t(炉Im梨pl搂i肉mp吐l机)圾{Re底tu惨rn蒙n惑ew患W言ri遣te吴r(坑im常pl招);}Pu歌bl娱ic命s喜ta纹ti堡c溜Wr螺it占er姿c末re载at挽(f继in智al弄j即av付a.宜io帽.W调ri奴te屈r闹w)绢{Re焦tu拍rn雹n绝ew听W暮ri拆te怨r(振ne条w启Im辰pl火()部{Pu活bl孤ic箩v锹oi奖d时Wr辈it叫e(滑St吃ri蜡ng悬,s凝tr滨,i刮nt屑o然ff挑,i成nt简l折en运)Th押ro恩ws拌I帽oE勿xc惭ep熟ti红on扛{w.素Wr波it赵e(毒st另r,农of迷f,制le菜n)梨;}SP瞎I的提绢供者俱类(2)Pu帝bl辉ic毫v证oi庸d申wr祝it拍e(砌ch搭ar挣[]谢a酱rr限,i决nt禽o绸ff劲,i透nt馆l竹en拴)Th曾ro患ws且I恢oE育xc嫩ep誓ti进on硬{监w琴.w饿ri尿te猛(a毕rr指,o遭ff冲,l炒en丹);祝}Pu绘bl岂ic碧v贱oi戚d海cl灾os悔e(甲)显th苦ro谅ws逮I敌oE倾xc歪ep污to茧n乐{宣w阵.c算lo缴se野()教;垃}Pu育bl阀ic星v回oi谣d元fl洁us池h(臭)如th盈ro雷ws睁I貌oE有xc随ep气ti萄on种{免w.调fl倘us鼓h(占);途}}Pu图bl欲ic摔s店ta辈ti师c脖Wr容it波er敏c唇re末at县Bu差ff抱er婆ed颜(f摩in煮al汇W践ri决te歇r夹ou蔑t)虚{Re弄tu绘rn语c泛re符at塔e(额ne偶w嗓Si毕mp害le礼Bu普ff蒜er桨(o究ut旬))吹;}Pu晚bl击ic挂s仙ta触ti验c总in侦te卵rf见ac谁e策Im迈pl冤{Pu柿bl悉ic摔v陈oi栋d顺cl纹os供e(确)巡寿th深ro驼ws应I重oE合xc傲ep叠ti劈燕on侍;Pu油bl巩ic借v候oi饿d举fl茅us缩慧h(育)董th鞭ro填ws光I场oE珠xc成ep待ti恳on辫;Pu犁bl钳ic纸v竟oi术d叉wr午it匙e(照St茂ri旨ng笛s午,i川nt蜘o握ff恶,i都nt旧l欠en氧)任th慢ro疫ws溉I喜oE博xc丝式ep街ti毅on孙;Pu泉bl挎ic妄v冶oi落d丙wr益it轧e(傻ch辟ar绕[]孩a或,i藏nt名o婶ff涛,i淋nt低l灰en古)妄th渴ro料ws登I缩慧oE决xc任ep枪ti藏on访;}刃}SP欺I的提券供者兵类(3)Pu绣bl吗ic何f煮in诞al委c患la咬ss艺W迁ri鉴te科r岂im价pl壶em撤en经ts饿A沈pp悼en杠da某bl药e海{Pr唉iv停at卡e随fi家na仇l机Im薪pl沉i吉mp付l庙;Pr对iv俯at辟e维fi丙na借l帆Im边pl稻Se补q必se颗q;Pr墓iv涉at汇e塑Wr瓦it肥er携((腰Im乎pl给i欺mp笛l泥,I侍mp量lS弟eq架s孔eq姨){殊Th鲁is谎.i听mp黄l夜=i桐mp怠l;斩T蛇hi子ss鼠eq广=弃se蓄q;棋}Pu研bl赤ic罩f桌in澡al寺v纠oi升d自wr因it住e(招in紧t赛c)棕t俱hr央ow统s绸IE连xc瓜ep乓ti款on迫{If很(撇im颗pl掌!=软nu转ll痒)承{奏Ch属ar珠[]么a尽rr评=亿{(蓝ch影ar好)效c}遭;范Im努pl描.w痛ri莲te仍(a尘rr件,花0,节1)}el自se屡{独S愁eq慈.w速ri含te每(n敢ew歼C扎ha射rS敲eq探(c喊))肺;满}}Pu岁bl友ic编f誓in忽al团v扫oi浆d钥wr狭it育e(赵ch钩ar信c互bu汁f[咬])友t泥hr钉ow冒s含Io芳Ex用ce劫pt敢io线n翅{If花(妄im今pl陈!=晋nu肌ll糖){Im表pl烦.w冲ri筑te染(c耀bu妻f,逐0,男cb辨uf滨.l叨en废gt珠h)羊;}雪el区se{Se侮q.情wr投it厨e(贫ne叼w赤Ch窜ar症Se煤q(去cb良uf伪,0监,c贝bu恐f.吧le文ng乏th剂))忧;会}}SP排I的提居供者锄类(4)Pu兵bl瞎ic塌f社in庄al牌v筒oi族d仰wr凝it被e(威ch敌ar汽c惩bu曾f[赤],欺in娇t理of捉f,浴in释t料le补n)Th李ro酷ws怜I客oE慢xc鸟ep笼ti罢on誓{If絮(额im伙pl困!肾=n滚ul臂l)井{片I迈mp链l.协wr寄it防e(南cb坝uf横,o稻ff壁,l谢en旋);}虫el剑se驱{错Se卖q.扰wr嫂it劳e(论ne始w花Ch唤ar狸Se羡q(惕cb枣uf饭,o苗ff傍,l耐en续))篮;自}敌}Pu梅bl羞ic兔f政in橡al朗v吩oi钩d县wr惑it植e(袍St欢ri墓ng绢s黑tr庙)统th蜓ro灯ws搜I罢oE述xc历ep租ti材on荒{If志(议im馆pl剥!颤=n灭ul悉l)谅{怖I秘mp剑l.凉wr碰it割e(花st毁r,老0,趁st如r.馅le杰ng胡th它))订;}桑el悄se典{径S电eq粮.w估ri股te隶(s非tr笨);即}}Pu节bl镰ic霞f槽in勤al耀v法oi海d翻wr苦it铺e(竖St塘ri皮ng繁s刷tr瘦,i度nt党o锋ff皮,i虎nt恐l衡en姜)Th准ro听ws返I耍oE搜xc晒ep牙ti甘on灶{If宫(环im发pl欺!=你nu演ll功)世{六Im惹pl传.w妖ri裙te滔(s辰tr鹊,o蠢ff献,l坝en屈);}抗el厌se汉{汽S膏eq涌.w唉ri燥te吸(s直tr磨.s衡ub蓬Se狡qu豪en蚂ce农(o躲ff少,o怖ff响+l基en乓))税;}}SP延I的提嗓供者首类(5)Pu粱bl平ic桌f错in融al记v须oi海d叼fl剂us暗h(以)制th却ro狼ws剧I质oE纪xc棵ep槐ti取on既{If谱(授im味pl顾!=吨nu续ll挡)这{是I访mp湿l.拉fl踢us萍h(贯);}医el加se取{萌S践eq番.f沫lu辅sh刻()晋;弹}}Pu轰bl覆ic颂f辣in览al亲v盟oi缠d嘱cl劫os闯e(满)耕th才ro门ws鬼I池oE冻xc闹ep厕ti蛾on免{If迅(安im北pl身!=侮nu宣ll炸)形{I纳mp左l.返cl武os槽e(仗);}词el铃se带{忆S统eq删.f僵lu缝sh经()列;奸}}SP罩I的提故供者横类(6)设计泥给客坚户使誓用AP捉I,最好竞用fi暂na羽l类;斯而设志计SP薯I的时持候,弓则最出好用洞接口鲁,然堵后等通过旨一个辅工厂弱模式础将它益们结荒合在卖一起蛋。借脚助“紫工厂织设计稼模式怀”尽膝可能仓是对累客户警“隐幕藏了水”相励应的枯复杂姿度,匪在AP脊I功能堪时,碍用户嗓则只治看到fi催na课l类Wr肃it场er,对朝于要庸扩展AP般I功能再的人驳,则劈燕只需腰要看攻到两阔个要独实现汁的接玩口Im过pl和Im船pl钓Se且q,所释以不掌管是逢使用外还是吴扩展偷这个AP跌I,复擦杂度寒都不凶高。淹虽然蜂根据菌这个溉方案际写出椅第一饮个版尝本AP麦I时,召也许郑工作陷量会殊多一唐些,号但是革将客长户用巴到功旁能性AP傻I和SP伤I分离焰出来迟,大育大降齿低了验演进肚难度旦,避播免出静现将歼代理胃与继涝承混偿合时墙出现塞的那惨种问五题。8.症4合理艰分解AP仗I(1)可以绕把AP颜I分为沃两类和,一督类是赴供他监人调血用来商完成矮某些民功能凭,还印有一债类是挤他人疼来扩衣展AP鉴I功能梦的,昂也就挑是前美面说亚的SP界I。任何AP蔬I都会度显示煌出一峰定的斑内聚境性:片表现优为把龙相关穷的内永容放慕得比涉较近夕,比暮如说御把有隆关联词的内领容放骂在一雾个类当里,销或者绢放在违同一谢个包盯中,酒可能类就是辣放在隐同一根个模降块里磨了。搅面向蜡对象盘语言任都有未内聚府性的谷倾向殖。合理维分解AP彻I(2)期望毙来组渡织你仙的AP回I,方崖便他叼们快镰速找旨到自荒己的梨内容芝。。把饶有关常

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论