設(shè)計(jì)模式-6-行為模式(一)_第1頁(yè)
設(shè)計(jì)模式-6-行為模式(一)_第2頁(yè)
設(shè)計(jì)模式-6-行為模式(一)_第3頁(yè)
設(shè)計(jì)模式-6-行為模式(一)_第4頁(yè)
設(shè)計(jì)模式-6-行為模式(一)_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第6章行為模式(一)本章目標(biāo)了解什么是命令模式>掌握命令模式的應(yīng)用了解什么是觀察者模式>掌握觀察者模式的應(yīng)用本章單詞:action invokeraction invoker observer transaction receiver 6.1命令模式(Command)6.1.1概念1、名稱(chēng)命令(Command)模式屬于對(duì)象的行為模式【GOF95】。命令模式又稱(chēng)為行動(dòng)(Action)模式或交易(Transaction)模式。命令模式把一個(gè)請(qǐng)求或者操作封裝到一個(gè)對(duì)象中。命令模式允許系統(tǒng)使用不同的請(qǐng)求把客戶(hù)端參數(shù)化,對(duì)請(qǐng)求排隊(duì)或者記錄請(qǐng)求日志,可以提供命令的撤銷(xiāo)和恢復(fù)功能。命令模式是對(duì)命令的封裝。命令模式把發(fā)出命令的責(zé)任和執(zhí)行命令的責(zé)任分割開(kāi),委派給不同的對(duì)象。每一個(gè)命令都是一個(gè)操作:請(qǐng)求的一方發(fā)出請(qǐng)求要求執(zhí)行一個(gè)操作;接收的一方收到請(qǐng)求,并執(zhí)行操作。命令模式允許請(qǐng)求的一方和接收的一方獨(dú)立開(kāi)來(lái),使得請(qǐng)求的一方不必知道接收請(qǐng)求的一方的接口,更不必知道請(qǐng)求是怎么被接收,以及操作是否被執(zhí)行、何時(shí)被執(zhí)行,以及是怎么被執(zhí)行的。2、結(jié)構(gòu)命令模式不是新的發(fā)明,在美猴王大鬧天宮之前就有了。那時(shí)玉帝命令太白金星召美猴王上天:"金星徑入(水簾洞)當(dāng)中,面南立定道:'我是西方太白金星,奉玉帝招安圣旨,下界請(qǐng)你上大,拜受仙錄。'"玉帝是系統(tǒng)的客戶(hù)端,太白金星是命令的發(fā)出者,猴王是命令的接收者,圣旨就是命令。玉帝的這一道命令就是要求猴王到上界報(bào)到。玉帝只管發(fā)出命令,而不管命令是怎樣傳達(dá)到美猴王的。太白金星負(fù)責(zé)將圣旨傳到,可是美猴王怎么執(zhí)行圣旨、何時(shí)執(zhí)行圣旨是美猴王自己的事。果不然,個(gè)久美猴王就大鬧了天宮。這個(gè)模擬系統(tǒng)的設(shè)計(jì)如圖6-1所示。OA執(zhí)行0:四訶執(zhí)行QOA執(zhí)行0:四訶執(zhí)行Q:widclassCommand玉皇大誥盤(pán)白金星圖6-1模擬結(jié)構(gòu)命令模式的類(lèi)圖如圖6-2所示。3、意圖將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,從而使你可用不同的請(qǐng)求對(duì)客戶(hù)進(jìn)行參數(shù)化;對(duì)請(qǐng)求排隊(duì)或記錄請(qǐng)求日志,以及支持可取消的操作。這里所謂的“不同的請(qǐng)求”也既意味著請(qǐng)求可能發(fā)生的變化,是一個(gè)可能擴(kuò)展的功能點(diǎn)。4、適用性抽象出待執(zhí)行的動(dòng)作以參數(shù)化某對(duì)象,適用過(guò)程語(yǔ)言中的回調(diào)函數(shù)表達(dá)這種參數(shù)化的機(jī)制。所謂的回調(diào)函數(shù)指函數(shù)先在某處注冊(cè),而他將在稍后的某個(gè)需要的時(shí)候被調(diào)用。Command模式是回調(diào)機(jī)制的一個(gè)面向?qū)ο蟮奶娲贰?在不同的時(shí)刻指定、排列和執(zhí)行的請(qǐng)求。支持取消操作。支持修改日志,這樣當(dāng)系統(tǒng)崩潰時(shí)這些修改可以被從新作一遍。用構(gòu)建在原語(yǔ)操作上的高層操作構(gòu)造一個(gè)系統(tǒng)。這樣一種結(jié)構(gòu)支持事務(wù)的信息系統(tǒng)中很常見(jiàn)。5、個(gè)角色+客戶(hù)(Client)角色:創(chuàng)建了一個(gè)具體命令(ConcreteCommand)對(duì)象并確定其接收者。+命令(Command)角色:聲明了一個(gè)給所有具體命令類(lèi)的抽象接口。這是一個(gè)抽象角色。+具體命令(ConcreteCommand)角色:定義一個(gè)接受者和行為之間的弱耦合;實(shí)現(xiàn)Execute()方法,負(fù)責(zé)調(diào)用接收考的相應(yīng)操作。Execute()方法通常叫做執(zhí)方法。請(qǐng)求者(Invoker)角色:負(fù)責(zé)調(diào)用命令對(duì)象執(zhí)行請(qǐng)求,相關(guān)的方法叫做行動(dòng)方法。接收者(Receiver)角色:負(fù)責(zé)具體實(shí)施和執(zhí)行一個(gè)請(qǐng)求。任何一個(gè)類(lèi)都可以成為接收者,實(shí)施和執(zhí)行請(qǐng)求的方法叫做行動(dòng)方法。6.1.2作用有時(shí)必須向一個(gè)對(duì)象提交請(qǐng)求,但是并不知道關(guān)于被請(qǐng)求的操作或者請(qǐng)求的接受者的任何信息。命令模式通過(guò)將請(qǐng)求本身變成一個(gè)對(duì)象來(lái)使工具箱對(duì)象可向未指定的應(yīng)用對(duì)象提出請(qǐng)求,這個(gè)對(duì)象可以被存儲(chǔ)并像其他的對(duì)象一樣被傳遞,這一個(gè)模式的關(guān)鍵是抽象的Command類(lèi),它定義了一個(gè)執(zhí)行操作的接口,其最簡(jiǎn)單的形式是一個(gè)抽象的Execute操作,具體的Command子類(lèi)將接收者作為其一個(gè)實(shí)例變量,并實(shí)現(xiàn)Execute操作,制定接收者采取的動(dòng)作,而接收者有執(zhí)行該請(qǐng)求所需的具體信息。6.1.3適用范圍在下面的情況下應(yīng)當(dāng)考慮使用命令模式:+使用命令模式作為“CallBack”在面向?qū)ο笙到y(tǒng)中的替代?!癈allBack”講的便是先將一個(gè)函數(shù)登記上,然后在以后調(diào)用此函數(shù)。需要在不同的時(shí)間指定請(qǐng)求、將請(qǐng)求排隊(duì)。一個(gè)命令對(duì)象和原先的請(qǐng)求發(fā)出者可以有不同的生命期。換言之,原先的請(qǐng)求發(fā)出者可能已經(jīng)不在了,而命令對(duì)象本身仍然是活動(dòng)的。這時(shí)命令的接收者可以是在本地,也可以在網(wǎng)絡(luò)的另外一個(gè)地址。命令對(duì)象可以在串形化之后傳送到另外一臺(tái)機(jī)器上去。+系統(tǒng)需要支持命令的撤消(undo)。命令對(duì)象可以把狀態(tài)存儲(chǔ)起來(lái),等到客戶(hù)端需要撤銷(xiāo)命令所產(chǎn)生的效果時(shí),可以調(diào)用undo()方法,把命令所產(chǎn)生的效果撤銷(xiāo)掉。命令對(duì)象還可以提供redo()方法,以供客戶(hù)端在需要時(shí),再重新實(shí)施命令效果。如果一個(gè)系統(tǒng)要將系統(tǒng)中所有的數(shù)據(jù)更新到日志里,以便在系統(tǒng)崩潰時(shí),可以根據(jù)日志里讀回所有的數(shù)據(jù)更新命令,重新調(diào)用Execute()方法一條一條執(zhí)行這些命令,從而恢復(fù)系統(tǒng)在崩潰前所做的數(shù)據(jù)更新。+一個(gè)系統(tǒng)需要支持交易(Transaction)。一個(gè)交易結(jié)構(gòu)封裝了一組數(shù)據(jù)更新命令。使用命令模式來(lái)實(shí)現(xiàn)交易結(jié)構(gòu)可以使系統(tǒng)增加新的交易類(lèi)型。6.1.4實(shí)現(xiàn)下面是一個(gè)簡(jiǎn)單命令模式的實(shí)現(xiàn)代碼。接收者角色:*接收者類(lèi)@authorsanlian@versionNov25,20104:34:52PM*/publicclassReceiver{/***請(qǐng)求一*/publicvoidactionOne(){System.ou亡.println("ActionOnehasbeentaken.");}/***請(qǐng)求二*/publicvoidactionTwo(){System.ou亡.println("ActionTwohasbeentaken.");}}命令角色:/***命令接口@authorsanlian@versionNov25,20104:21:15PM*/publicinterfaceCommand{/***執(zhí)行方法*/voidexecute();}/***具體命令實(shí)現(xiàn)一@authorsanlian@versionNov25,20104:34:30PM*/publicclassConcreteCommandOneimplementsCommand{privateReceiverreceiver;publicConcreteCommandOne(Receiverrec){thisreceiver=rec;}publicvoidexecute() {receiver.actionOne();}}/***具體命令實(shí)現(xiàn)二@authorsanlian@versionNov25,20104:37:12PM*/publicclassConcreteCommandTwoimplementsCommand{privateReceiverreceiver;publicConcreteCommandTwo(Receiverrec){thisreceiver=rec;}publicvoidexecute() {this.receiver.actionTwo();}}調(diào)用者角色:/***調(diào)用者@authorsanlian@versionNov25,20104:37:35PM*/publicclassInvoker{privateCommandcmdOne;privateCommandcmdTwo;publicInvoker(Commandone,Commandtwo){this.cmdOne=one;this.cmdTwo=two;}publicvoidactionOne(){this.cmdOne.execute();}publicvoidactionTwo(){this.cmdTwo.execute();}}客戶(hù)端角色:packagemand;/***客戶(hù)端@authorsanlian@versionNov25,20104:42:26PM*/publicclassClient{publicstaticvoidmain(String[]args){Receiverrec=newReceiver();Commandone=newConcreteCommandOne(rec);Commandtwo=newConcreteCommandTwo(rec);Invokerink=newInvoker(one,two);ink.actionOne();ink.actionTwo();}}執(zhí)行結(jié)果如圖6-3所示。圖6-3運(yùn)行結(jié)果上面的代碼似乎顯的很多余,本來(lái)可以使用更簡(jiǎn)單的實(shí)現(xiàn),代碼如下:publicclassReceiver{publicvoidactionOne(){System.ou亡.println("ActionOnehasbeentaken.");}publicvoidactionTwo(){System.ou亡.println("ActionTwohasbeentaken.");}}publicclassClient{publicstaticvoidmain(String[]args){Receiverrec=newReceiver();rec.actionOne();rec.actionTwo();}J看多簡(jiǎn)潔,如果是像上邊如此簡(jiǎn)單的需求,這個(gè)才應(yīng)該是我們的選擇,但是有些情況下這樣的寫(xiě)法不能解決的,或者說(shuō)解決起來(lái)不好,所以引入命令模式。如以下情況:+我們須要Client和Receiver同時(shí)開(kāi)發(fā),而且在開(kāi)發(fā)過(guò)程中分別須要不停重購(gòu),改名。+如果我們要求Redo,Undo等功能。我們須要命令不按照調(diào)用執(zhí)行,而是按照?qǐng)?zhí)行時(shí)的情況排序,執(zhí)行。開(kāi)發(fā)后期,我們發(fā)現(xiàn)必須要log哪些方法執(zhí)行了,如何在盡量少更改代碼的情況下實(shí)現(xiàn),并且漸少重復(fù)代碼。在上邊的情況下,我們的接受者有很多,不止一個(gè)。解決辦法:+情況一:我們可以定義一個(gè)接口,讓Receiver實(shí)現(xiàn)這個(gè)接口‘Client按照接口調(diào)用。+情況二:我們可以讓Receiver記住一些狀態(tài),例如執(zhí)行前的自己的狀態(tài),用來(lái)undo,但自己記錄自己的狀態(tài)實(shí)現(xiàn)起來(lái)比較混亂,一般都是一個(gè)累記錄另一個(gè)類(lèi)的狀態(tài)。情況三:很難實(shí)現(xiàn)。+情況四:我們須要在每個(gè)Action,前后加上log+情況五:相對(duì)好實(shí)現(xiàn),但是再加上這個(gè),是否感覺(jué)最終的實(shí)現(xiàn)很混亂呢好,我們?cè)賮?lái)看看命令模式,在命令模式中,我們?cè)黾右恍┻^(guò)渡的類(lèi),這些類(lèi)就是上邊的命名接口和命令實(shí)現(xiàn),這樣就很好的解決了情況一,情況二。我們?cè)偌尤胍粋€(gè)Invoker,這樣情況三和情況四就比較好解決了。如下加入Log和排序后的Invoker:packagemand;importjava.util.ArrayList;importjava.util.List;/***調(diào)用者@authorsanlian@versionNov25,20104:37:35PM*/publicclassInvoker{privateListcmdList=newArrayList();publicvoidadd(Commandcmd){this.cmdList.add(cmd);}publicvoidremove(Commandcmd){this.cmdList.remove(cmd);}publicvoidaction(){Commandcmd;while((cmd=getCmd())!=null){System.ou亡.println("log:begin"+cmd.getClass().getName());cmd.execute();System.ou亡.println("log:end"+cmd.getClass().getName());}}publicCommandgetCmd(){Commandcmd=null;//按照自定義優(yōu)先級(jí),排序去除cmdreturncmd;}}客戶(hù)端代碼如下:packagemand;/***客戶(hù)端@authorsanlian@versionNov25,20104:42:26PM*/publicclassClient{publicstaticvoidmain(String[]args){Receiverrec=newReceiver();Command one = new ConcreteCommandOne(rec);Command two = new ConcreteCommandTwo(rec);Invoker ink = new Invoker();ink.add(one);ink.add(two);ink.action();}}該實(shí)例的最終結(jié)構(gòu)如圖6-4所示。圖6-4結(jié)構(gòu)圖6.1.5優(yōu)缺點(diǎn)1、優(yōu)點(diǎn)命令模式使新的命令很容易地被加入到系統(tǒng)里。+允許接收請(qǐng)求的一方?jīng)Q定是否要否決(Veto)請(qǐng)求。能較容易地設(shè)計(jì)-個(gè)命令隊(duì)列。+可以容易地實(shí)現(xiàn)對(duì)請(qǐng)求的Undo和Redo。+在需要的情況下,可以較容易地將命令記入日志。命令模式把請(qǐng)求一個(gè)操作的對(duì)象與知道怎么執(zhí)行一個(gè)操作的對(duì)象分割開(kāi)。命令類(lèi)與其他任何別的類(lèi)一樣,可以修改和推廣。+你可以把命令對(duì)象聚合在一起,合成為合成命令。比如宏命令便是合成命令的例子。合成命令是合成模式的應(yīng)用。由于加進(jìn)新的具體命令類(lèi)不影響其他的類(lèi),因此增加新的具體命令類(lèi)很容易。2、缺點(diǎn)使用命令模式會(huì)導(dǎo)致某些系統(tǒng)有過(guò)多的具體命令類(lèi)。某些系統(tǒng)可能需要幾十個(gè),幾百個(gè)甚至幾千個(gè)具體命令類(lèi),這會(huì)使命令模式在這樣的系統(tǒng)里變得不實(shí)際。6.2觀察者模式(Observer)6.2.1概念1、名稱(chēng)觀察者模式又叫做發(fā)布-訂閱(Publish/Subscribe)模式、模型-視圖(Model/View)模式、源-監(jiān)聽(tīng)器(Source/Listener)模式或從屬者(Dependents)模式。觀察者模式定義了一種一對(duì)多的依賴(lài)關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽(tīng)某一個(gè)主題對(duì)象。這個(gè)主題對(duì)象在狀態(tài)上發(fā)生變化時(shí),會(huì)通知所有觀察者對(duì)象,使它們能夠自動(dòng)更新自己。一個(gè)軟件系統(tǒng)常常要求在某一個(gè)對(duì)象的狀態(tài)發(fā)生變化的時(shí)候,某些其它的對(duì)象做出相應(yīng)的改變。做到這一點(diǎn)的設(shè)計(jì)方案有很多,但是為了使系統(tǒng)能夠易于復(fù)用,應(yīng)該選擇低耦合度的設(shè)計(jì)方案。減少對(duì)象之間的耦合有利于系統(tǒng)的復(fù)用,但是同時(shí)設(shè)計(jì)師需要使這些低耦合度的對(duì)象之間能夠維持行動(dòng)的協(xié)調(diào)一致,保證高度的協(xié)作(Collaboration)。觀察者模式是滿(mǎn)足這一要求的各種設(shè)計(jì)方案中最重要的一種。2、結(jié)構(gòu)觀察者模式的類(lèi)圖如圖6-5所示。圖6-5觀察者模式結(jié)構(gòu)3、意圖觀察者模式屬于行為型模式,其意圖是定義對(duì)象間的一種一對(duì)多的依賴(lài)關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴(lài)于它的對(duì)象都得到通知并被自動(dòng)更新。4、適用性在以下的任一情況下可以使用觀察者模式:+當(dāng)一個(gè)抽象模型有兩個(gè)方面,其中一個(gè)方面依賴(lài)于另一方面。將這二者封裝在獨(dú)立的對(duì)象中可以使他們各自獨(dú)立地改變和復(fù)用。+當(dāng)對(duì)一個(gè)對(duì)象的改變需要同時(shí)改變其它對(duì)象,而不知道具體由多少對(duì)象有待改變。當(dāng)一個(gè)對(duì)象必須通知其他對(duì)象,而它又不能假定其他對(duì)象是誰(shuí),換言之,你不希望這些對(duì)象是緊密耦合的。5、角色觀察者模式的實(shí)現(xiàn)里有下面這些角色:+抽象主題(Subject)角色:主題角色把所有對(duì)觀察考對(duì)象的引用保存在一個(gè)聚集里,每個(gè)主題都可以有任何數(shù)量的觀察者。抽象主題提供一個(gè)接口,可以增加和刪除觀察者對(duì)象,主題角色又叫做抽象被觀察者(Observable)角色,一般用一個(gè)抽象類(lèi)或者一個(gè)接口實(shí)現(xiàn)。+抽象觀察者(Observer)角色:為所有的具體觀察者定義一個(gè)接口,在得到主題的通知時(shí)更新自己。這個(gè)接口叫做更新接口。抽象觀察者角色一般用一個(gè)抽象類(lèi)或者一個(gè)接口實(shí)現(xiàn)。在這個(gè)示意性的實(shí)現(xiàn)中,更新接口只包含一個(gè)方法(即Update()方法),這個(gè)方法叫做更新方法。+具體主題(ConcreteSubject)角色:將有關(guān)狀態(tài)存入具體現(xiàn)察者對(duì)象;在具體主題的內(nèi)部狀態(tài)改變時(shí),給所有登記過(guò)的觀察者發(fā)出通知。具體主題角色又叫做具體被觀察者角色(ConcreteObservable)。具體主題角色通常用一個(gè)具體子類(lèi)實(shí)現(xiàn)。+具體觀察者(ConcreteObserver)角色:存儲(chǔ)與主題的狀態(tài)自恰的狀態(tài)。具體現(xiàn)察者角色實(shí)現(xiàn)抽象觀察者角色所要求的更新接口,以便使本身的狀態(tài)與主題的狀態(tài)相協(xié)調(diào)。如果需要,具體現(xiàn)察者角色可以保存一個(gè)指向具體主題對(duì)象的引用。具體觀察者角色通常用一個(gè)具體子類(lèi)實(shí)現(xiàn)。從具體主題角色指向抽象觀察者角色的合成關(guān)系,代表具體主題對(duì)象可以有任意多個(gè)對(duì)抽象觀察者對(duì)象的引用。之所以使用抽象觀察者而不是具體觀察者,意味著主題對(duì)象不需要知道引用了哪些ConcreteObserver類(lèi)型,而只知道抽象Observer類(lèi)型。這就使得具體主題對(duì)象可以動(dòng)態(tài)地維護(hù)一系列的對(duì)觀察者對(duì)象的引用,并在需要的時(shí)候調(diào)用每一個(gè)觀察者共有的Update()方法。這種做法叫做“針對(duì)抽象編程”。6.2.2作用+屏蔽線(xiàn)程間的通信機(jī)制:例如兩個(gè)線(xiàn)程之間,主線(xiàn)程可以作為觀察者,執(zhí)行線(xiàn)程是被觀察者。彼此之間只知道對(duì)方存在,但不知道之間通信的細(xì)節(jié)。消除硬編碼:如果沒(méi)有Observer模式,則只能采用回調(diào)的模式,或者在代碼中顯示地調(diào)用觀察者。優(yōu)化異常機(jī)制:特別適合在異常發(fā)生時(shí)向頂層監(jiān)控,減少try-catch代碼量。6.2.3實(shí)現(xiàn)老師有電話(huà)號(hào)碼,學(xué)生需要知道老師的電話(huà)號(hào)碼以便于在合時(shí)的時(shí)候撥打,在這樣的組合中,老師就是一個(gè)被觀察者(Subject),學(xué)生就是需要知道信息的觀察者,當(dāng)老師的電話(huà)號(hào)碼發(fā)生改變時(shí),學(xué)生得到通知,并更新相應(yīng)的電話(huà)記錄。整體的結(jié)構(gòu)如圖6-6所示。圖6-6結(jié)構(gòu)圖觀察者接口Observer代碼如下:packagecom.sanlian.mode.observer;/***觀察者@authorsanlian@versionNov26,201012:47:17PM*/被觀察者接口Subject代碼如下:packagecom.sanlian.mode.observer;/***被觀察者接口@authorsanlian@versionNov26,20101:08:38PM*/publicinterfaceSubject{publicvoidattach(Observero);publicvoiddetach(Observero);publicvoidnotice();}被觀察者實(shí)現(xiàn)類(lèi)Teacher代碼如下:packagecom.sanlian.mode.observer;importjava.util.Vector;/***教師,被觀察者實(shí)現(xiàn)類(lèi)@authorsanlian@versionNov26,20101:06:25PM*/publicclassTeacherimplementsSubject{privateStringphone; //電話(huà)privateVectorstudents;//觀者者集合publicTeacher(){phone="";students=newVector();}/***添加觀察者*/publicvoidattach(Observero){students.add(o);}/***移除觀察者*/publicvoiddetach(Observero){students.remove(o);}/***更新*/publicvoidnotice(){for(inti=0;i<students.size();i++){((Observer)students.get(i)).update();}}/***更改電話(huà)號(hào)碼*@paramphone*/publicvoidsetPhone(Stringphone){this.phone=phone;notice();}publicStringgetPhone(){returnphone;}}觀察者實(shí)現(xiàn)類(lèi)Student代碼如下:packagecom.sanlian.mode.observer;/***學(xué)生類(lèi),具體觀察者@authorsanlian@versionNov26,201012:59:34PM*/publicclassStudentimplementsObserver{privateStringname;//姓名privateStringphone; //老師電話(huà)privateTeacherteacher;//老師publicStudent(Stringname,Teachert){=name;teacher=t;}/***顯示信息*/publicvoidshow(){System.out.println("Name:"+name+"\t老師電話(huà):"+phone);}/***更新*/publicvoidupdate(){phone=teacher.getPhone();}}測(cè)試類(lèi)Test代碼如下:packagecom.sanlian.mode.observer;importjava.util.Vector;/***客戶(hù)端、測(cè)試類(lèi)@authorsanlian@versionNov26,20101:04:41PM*/publicclassTest{publicstaticvoidmain(String[]args){//被觀察者Teachert=newTeacher();//創(chuàng)建觀察者集合VectorstuList=newVector();for(inti=0;i<10;i++)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。