ureMVC開發(fā)框架使用手冊(cè)中_第1頁
ureMVC開發(fā)框架使用手冊(cè)中_第2頁
ureMVC開發(fā)框架使用手冊(cè)中_第3頁
ureMVC開發(fā)框架使用手冊(cè)中_第4頁
ureMVC開發(fā)框架使用手冊(cè)中_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、PureMVC開發(fā)框架使用手冊(cè)目錄(目錄結(jié)構(gòu)=類文件的文件夾結(jié)構(gòu))1 HYPERLINK l h1 patterns包1.1 HYPERLINK l h11 開發(fā)框架1.2 HYPERLINK l h12 框架結(jié)構(gòu)1.3 HYPERLINK l h13 使用方法1.4 HYPERLINK l h14 “高內(nèi)聚低耦合”的實(shí)現(xiàn)程序架構(gòu)要點(diǎn)2 HYPERLINK l h2 Facade類3 HYPERLINK l h3 mvc包3.1 HYPERLINK l h31 Model類3.2 HYPERLINK l h32 View類3.3 HYPERLINK l h33 Controller類4 HYP

2、ERLINK l h4 media包4.1 HYPERLINK l h41 Proxy類4.2 HYPERLINK l h42 Mediator類4.3 HYPERLINK l h43 Command類4.4 HYPERLINK l h44 Commands類5 HYPERLINK l h5 observer包5.1 HYPERLINK l h51 Observer類5.2 HYPERLINK l h52 Notifier類5.3 HYPERLINK l h53 Notice類正文1 HYPERLINK l h00 patterns包是開發(fā)框架的頂級(jí)包,應(yīng)該放在程序的類目錄的根目錄下。1.1

3、HYPERLINK l h00 開發(fā)框架開發(fā)框架就是一個(gè)空架子,我們可以自己加工、創(chuàng)造零部件,裝配上去,使這個(gè)系統(tǒng)按照我們的設(shè)計(jì)意圖運(yùn)行起來。這個(gè)開發(fā)框架基于PureMVC框架構(gòu)建,目標(biāo)是開發(fā)出更健壯、易維護(hù)、易擴(kuò)展、可重用的應(yīng)用程序。當(dāng)然,采用這個(gè)開發(fā)框架并不等于實(shí)現(xiàn)了這個(gè)目標(biāo),要實(shí)現(xiàn)這個(gè)目標(biāo),還需要我們?cè)陂_發(fā)過程中不斷調(diào)整、不斷優(yōu)化程序架構(gòu)。實(shí)現(xiàn)這個(gè)目標(biāo)的關(guān)鍵是,降低模塊間的耦合度。1.2 HYPERLINK l h00 框架結(jié)構(gòu)這個(gè)開發(fā)框架分為低耦合的三個(gè)層Model、View和Controller。這三部分由三個(gè)單例模式類管理,三者合稱為核心層。還有一個(gè)單例模式類Faade,是整個(gè)系統(tǒng)

4、的管理者。簡(jiǎn)單地說,就是三個(gè)核心層、一個(gè)管理者,其余的就是零部件,可以按需增減。其架構(gòu)如下圖所示:其中: Model負(fù)責(zé)保存Proxy名稱與實(shí)例的映射,根據(jù)Proxy名稱獲取其實(shí)例。Proxy負(fù)責(zé)保存數(shù)據(jù)對(duì)象,存取數(shù)據(jù)。 View負(fù)責(zé)保存Mediator名稱與實(shí)例的映射、Notice名稱與觀察者的映射,根據(jù)Mediator名稱獲取其實(shí)例,根據(jù)Notice通知其觀察者。Mediator負(fù)責(zé)保存視圖組件,操作具體的視圖組件,處理通知。觀察者負(fù)責(zé)保存通知的處理者及其處理方法,收到通知?jiǎng)t告知其處理者處理這個(gè)通知。 Controller負(fù)責(zé)保存Notice名稱與Command類的映射,執(zhí)行通知對(duì)應(yīng)的Co

5、mmand。Command負(fù)責(zé)執(zhí)行業(yè)務(wù)邏輯處理通知。 Faade是框架的管理者和通信中心,是框架與外界通信的唯一接口,負(fù)責(zé)初始化Model、View、Controller單例,發(fā)送通知。1.3 HYPERLINK l h00 使用方法開發(fā)框架只是搭建了一個(gè)空架子,我們所要做的就是編寫具體的Command、Mediator、Proxy等這些零部件,給它們添加自定義屬性和方法,保存到Model、View、Controller中。在沒有保存Proxy、Mediator和Observer、Command時(shí),Model、View、Controller就是一個(gè)空架子。通常,我們需要自定義視圖組件:影片剪輯

6、或聲音放在Flash庫中,它們對(duì)應(yīng)的類文件放在包中,F(xiàn)lash的舞臺(tái)就是一個(gè)自定義視圖組件,文檔類就是舞臺(tái)對(duì)應(yīng)的類文件。有時(shí),還需要自定義事件、聲音對(duì)象、數(shù)據(jù)對(duì)象等等。1.4 HYPERLINK l h00 “高內(nèi)聚低耦合”的實(shí)現(xiàn)程序架構(gòu)要點(diǎn) 什么是高內(nèi)聚低耦合?簡(jiǎn)單地說,就是模塊之間不直接互相操作,而是通過中介:通知、事件來實(shí)現(xiàn)互操作。舉例一:程序中有兩個(gè)對(duì)象A、B,當(dāng)A發(fā)生變化時(shí),需要B隨之變化。如果A發(fā)生變化時(shí),只發(fā)出通知或觸發(fā)事件,B負(fù)責(zé)響應(yīng),那么A、B之間就是低耦合關(guān)系。A、B不必知道對(duì)方的實(shí)現(xiàn)細(xì)節(jié)。如果A發(fā)生變化時(shí),直接調(diào)用B的接口,使B發(fā)生相應(yīng)變化,并獲取操作結(jié)果,那么A、B之間

7、就是強(qiáng)耦合關(guān)系。A、B需要知道對(duì)方的一些實(shí)現(xiàn)細(xì)節(jié)(屬性或方法)。舉例二:球場(chǎng)上打比賽,As是裁判、Bs是球員,As與Bs需要合作。如果比賽需要暫停,As只是吹哨,Bs聽到號(hào)令就停下來,那么As、Bs之間就是低耦合關(guān)系。As、Bs不必抓住對(duì)方手腳。如果比賽需要暫停,As直接走過去把Bs控制住,使Bs無法繼續(xù)行動(dòng),那么As、Bs之間就是強(qiáng)耦合關(guān)系。 實(shí)現(xiàn)手段程序架構(gòu)要點(diǎn)1、采用事件模型2、采用通知機(jī)制3、事件模型和通知機(jī)制的結(jié)合2 HYPERLINK l h00 Facade類包:patterns類:public class Faade實(shí)現(xiàn):FaadeIFacadeFaade是框架的管理者和通信中

8、心,是框架與外界通信的唯一接口,放在頂級(jí)包中,負(fù)責(zé)初始化Model、View、Controller單例,發(fā)送通知。2.1 屬性/=只允許自己和子類訪問 =protected var model:Model; / Model單例protected var view:View; / View單例protected var controller:Controller; / Controller單例protected static var instance:Facade; / Facade單例protected const SINGLETON_MSG:String = Facade already e

9、xist!; /消息常量(通常,在自定義Faade類中定義通知名稱常量。因?yàn)橄到y(tǒng)全局都要用。)2.2 方法public function Facade() /構(gòu)造函數(shù),由于Facade是單例,所以應(yīng)調(diào)用單例工廠方法Facade.getInstance(),而不能直接調(diào)用該構(gòu)造函數(shù),否則會(huì)拋出異常protected function initFacade():void /初始化Facade單例,子類可追加不要替換public static function getInstance():Faade / Facade單例工廠方法/= 創(chuàng)建三個(gè)核心層 = protected function init

10、Model():void /在自定義Faade子類中,若想創(chuàng)建自定義Model并且自定義Proxy初始化時(shí)不需要引用Facade,可以重寫這個(gè)方法,否則就先調(diào)用這個(gè)方法,再注冊(cè)Proxy。注意:這個(gè)方法很少被重寫,實(shí)踐中,你更喜歡用command創(chuàng)建并注冊(cè)Proxy,因?yàn)榇嬗锌勺償?shù)據(jù)的Proxy很可能需要發(fā)送Notice,因此在創(chuàng)建時(shí)需要引用Facade。protected function initView():void /在自定義Faade子類中,若想創(chuàng)建自定義View,或想注冊(cè)自定義Observers,可以重寫這個(gè)方法,否則就先調(diào)用這個(gè)方法,再注冊(cè)Mediator。注意:這個(gè)方法很少被重

11、寫,實(shí)踐中你更可能使用command創(chuàng)建并注冊(cè)Mediator,因?yàn)镸ediator實(shí)例需要發(fā)送Notice,因此在創(chuàng)建時(shí)需要引用Faade。protected function initController():void /在自定義Facade子類中,若想創(chuàng)建自定義Controller,可以重寫這個(gè)方法,否則就先調(diào)用這個(gè)方法,再注冊(cè)command/= 與Model層的交互 =public function addProxy ( proxy:IProxy ):void /添加proxy實(shí)例到Model中public function retrieveProxy ( proxyName:Stri

12、ng ):IProxy /從Model中獲取proxy實(shí)例public function removeProxy ( proxyName:String ):IProxy /從Model中移除proxy實(shí)例public function hasProxy( proxyName:String ):Boolean /判斷Model中是否有proxy實(shí)例/= 與View層的交互 =public function addMediator( mediator:IMediator ):void /添加mediator實(shí)例到View中public function retrieveMediator( medi

13、atorName:String ):IMediator /從View中獲取mediator實(shí)例public function removeMediator( mediatorName:String ):IMediator /從View中移除mediator實(shí)例public function hasMediator( mediatorName:String ):Boolean /判斷View中是否有mediator實(shí)例/= 與Controller層的交互 =public function addCommand( noticeName:String, cmd:Class ):void /添加Com

14、mand類到Controller中public function removeCommand( noticeName:String ):void /從Controller中移除noticeName 對(duì)應(yīng)的Command類public function hasCommand( noticeName:String ) : Boolean /判斷Controller中是否有noticeName 對(duì)應(yīng)的Command類/= 與Observer的交互,實(shí)現(xiàn)通信機(jī)制 =public function sendNotice( noticeName:String, body:Object=null, type

15、:String=null ):void /創(chuàng)建并發(fā)送一個(gè)通知,這樣,我們?cè)趯?shí)現(xiàn)代碼中,就不用再創(chuàng)建通知實(shí)例了。public function notifyObservers( notice:INotice ):void /公開這個(gè)方法,主要是為了向下兼容,允許你使用faade發(fā)送自定義通知。通常,你可以只調(diào)用sendNotice方法,根本不需要自己創(chuàng)建通知。3 HYPERLINK l h00 mvc包只有三個(gè)核心類,是三個(gè)單例,分別實(shí)現(xiàn)MVC三個(gè)核心層,是框架的主體(media是配件),不可增減。3.1 HYPERLINK l h00 Model類包:patterns.mvc類:public

16、class Model實(shí)現(xiàn):Model IModel負(fù)責(zé)保存Proxy名稱與實(shí)例的映射,根據(jù)Proxy名稱獲取其實(shí)例。 屬性/= 只允許自己和子類訪問 =protected var proxyMap:Object; /保存Proxy名稱與實(shí)例的映射protected static var instance:Model; /Model單例protected const SINGLETON_MSG:String = Model already exist!; /消息常量 方法public function Model() /Model是單例,不能直接調(diào)用該構(gòu)造函數(shù),而應(yīng)該調(diào)用單例工廠方法Model

17、.getInstance(),否則拋出異常protected function initModel():void /自動(dòng)被構(gòu)造函數(shù)調(diào)用,若自定義子類,則在這里添加自定義內(nèi)容,而不必override構(gòu)造函數(shù)public static function getInstance():Model /Model的單例工廠靜態(tài)方法/= 操作Proxy實(shí)例的接口 =public function addProxy( proxy:IProxy ):void /把Proxy實(shí)例賦值給proxyMap的屬性,Proxy的名稱作為proxyMap屬性名public function retrieveProxy( p

18、roxyName:String ):IProxy /以proxyName為關(guān)鍵字,獲取proxyMap的屬性對(duì)應(yīng)的Proxy實(shí)例public function removeProxy( proxyName:String ):IProxy /把proxyMap的屬性名為proxyName的屬性干掉public function hasProxy( proxyName:String ):Boolean /判斷proxyMap的屬性名為proxyName的屬性是否存在3.2 HYPERLINK l h00 View類包:patterns.mvc類:public class View實(shí)現(xiàn):ViewIV

19、iewView負(fù)責(zé)保存Mediator名稱與實(shí)例的映射、Notice名稱與觀察者的映射,根據(jù)Mediator名稱獲取其實(shí)例,根據(jù)Notice通知其觀察者。3.2.1 屬性/= 只允許自己和子類訪問 =protected var mediatorMap:Object; /存儲(chǔ)Mediator名稱到Mediator實(shí)例的映射protected var observerMap:Object; /存儲(chǔ)Notice名稱到觀察者列表的映射protected static var instance:View; /View單例protected const SINGLETON_MSG:String = Vie

20、w already exist!; /消息常量3.2.2 方法public function View() /View是單例,不能直接調(diào)用該構(gòu)造函數(shù),而應(yīng)調(diào)用單例工廠方法View.getInstance(),否則會(huì)拋出異常protected function initView():void /自動(dòng)被構(gòu)造函數(shù)調(diào)用,若自定義子類,就在這里設(shè)定自定義內(nèi)容,而不必override構(gòu)造函數(shù)public static function getInstance():View /View的單例工廠方法/= 對(duì)觀察者的操作 =public function addObserver( noticeName:Str

21、ing, observer:IObserver ):void /把observer存入觀察者列表中,收到通知,就遍歷對(duì)應(yīng)的觀察者列表,通知各個(gè)observerpublic function notifyObservers( notice:INotice ):void /通知notice的觀察者列表中的所有觀察者public function removeObserver( noticeName:String, processor:Object ):void /根據(jù)processor從noticeName的觀察者列表中移除觀察者/= 對(duì)Mediator的操作 =public function a

22、ddMediator( mediator:IMediator ):void /首先把Mediator實(shí)例賦值給mediatorMap的屬性,mediatorName作為屬性名。然后,通過名稱獲取Mediator實(shí)例,并進(jìn)一步查詢它所關(guān)心的Notice。若返回Notice列表,則創(chuàng)建觀察者(封裝Mediator實(shí)例及其handleNotice方法),把觀察者注冊(cè)給列表中的每個(gè)Notice。最后,觸發(fā)Mediator實(shí)例的被注冊(cè)事件。public function retrieveMediator( mediatorName:String ):IMediator /根據(jù)Mediator名稱獲取Me

23、diator實(shí)例public function removeMediator( mediatorName:String ):IMediator /首先根據(jù)Mediator名稱獲取Mediator實(shí)例,若該Mediator實(shí)例存在,則查詢?cè)搈ediator實(shí)例所關(guān)心的Notice,把mediator實(shí)例相關(guān)的觀察者從notice的觀察者列表中刪除。然后,把該mediator實(shí)例從mediatorMap中刪除。最后,觸發(fā)mediator實(shí)例的被刪除事件。public function hasMediator( mediatorName:String ):Boolean /判斷View的mediat

24、orMap中是否有這個(gè)mediator實(shí)例3.3 HYPERLINK l h00 Controller類包:patterns.mvc類:public class Controller實(shí)現(xiàn):ControllerIControllerController負(fù)責(zé)保存Notice名稱與Command類的映射,執(zhí)行通知對(duì)應(yīng)的Command。3.3.1 屬性/= 只允許自己和子類訪問 =protected var view:View; /對(duì)View單例的引用protected var commandMap:Object; /存儲(chǔ)通知名稱與Command類的映射protected static var ins

25、tance:Controller; /Controller單例protected const SINGLETON_MSG:String = Controller already exist!; /消息常量3.3.2 方法/= 創(chuàng)建Controller =public function Controller() /Controller是單例,不能直接調(diào)用該構(gòu)造函數(shù),而應(yīng)調(diào)用單例工廠方法Controller.getInstance(),否則會(huì)拋出異常protected function initController():void /自動(dòng)被構(gòu)造函數(shù)調(diào)用,可由子類覆蓋,添加自定義內(nèi)容,而不覆蓋構(gòu)造函數(shù)

26、。注意:若自定義View的子類,則也應(yīng)定義Controller的子類,并override這個(gè)方法,象這樣:view = MyView.getInstance();public static function getInstance():Controller / Controller的單例工廠方法/= 操作Command =public function executeCommand( note:INotice ):void /執(zhí)行note對(duì)應(yīng)的Command。首先根據(jù)note名稱,獲取command類,然后,創(chuàng)建command實(shí)例,執(zhí)行command業(yè)務(wù)邏輯。public function a

27、ddCommand( noteName:String, cmd:Class ):void /把Command類賦值給commandMap的屬性,屬性名為noteName。若某個(gè)noteName還沒Command,則先給note添加觀察者。若某個(gè)noteName已有Command,則用新command替換舊的。因?yàn)橐粋€(gè)note,只能有一個(gè)處理者,否則就亂套了。public function hasCommand( noteName:String ):Boolean /判斷noteName是否有對(duì)應(yīng)的Commandpublic function removeCommand( noteName:St

28、ring ):void /從Notice映射中移除注冊(cè)的Command。首先移除觀察者,再干掉command。4 HYPERLINK l h00 media包是一些中介人,它們是核心層與外界通信的代理人,是框架的配件(mvc是主體),可增減。我們的工作就是給這些配件添加自定義屬性和行為,來實(shí)現(xiàn)我們的需求。4.1 HYPERLINK l h00 Proxy類包:patterns.media類:public class Proxy繼承:ProxyNotifier實(shí)現(xiàn):Proxy IProxy, INotifierProxy是Model的助理,負(fù)責(zé)保存數(shù)據(jù)對(duì)象,存取數(shù)據(jù),可發(fā)送通知。4.1.1 屬性

29、public static var NAME:String = Proxy; /Proxy名稱常量protected var proxyName:String; / Proxy實(shí)例名稱protected var data:Object; /數(shù)據(jù)對(duì)象4.1.2 方法/= 訪問Proxy =public function Proxy( proxyName:String=null, data:Object=null ) /構(gòu)造函數(shù),保證proxyName有值,不保證datapublic function getProxyName():String /獲取Proxy名稱。在Model中,需要根據(jù)Pro

30、xy名稱來獲取Proxy實(shí)例/= 訪問數(shù)據(jù)對(duì)象 =public function setData( data:Object ):void /設(shè)定數(shù)據(jù)對(duì)象public function getData():Object /讀取數(shù)據(jù)對(duì)象/= 生死關(guān)頭處理一下 =public function onAdd():void /創(chuàng)建Proxy時(shí)public function onRemove( ):void /移除Proxy時(shí)4.2 HYPERLINK l h01Mediator類包:patterns. media類:public class Mediator繼承:Mediator Notifier實(shí)現(xiàn):

31、Mediator IMediator, INotifierMediator是View的助理,負(fù)責(zé)保存視圖組件,操作具體的視圖組件,處理通知。4.2.1 屬性public static const NAME:String = Mediator; /Mediator名稱常量,通常,Mediator用于控制特定的一個(gè)或一組視圖組件,不需要?jiǎng)討B(tài)命名protected var mediatorName:String; / Mediator實(shí)例名稱protected var viewComponent:Object; /保存視圖組件4.2.2 方法/= 訪問Mediator =public functio

32、n Mediator( mediatorName:String=null, viewComponent:Object=null ) /構(gòu)造函數(shù),保證mediatorName有值,不保證viewComponent。也就是說,可以不指定視圖。public function getMediatorName():String /獲取mediator名稱。在View中,需要根據(jù)mediator名稱來獲取mediator實(shí)例/= 讀寫視圖組件 =public function setViewComponent( viewComponent:Object ):void /設(shè)定mediator要處理的視圖組件

33、public function getViewComponent():Object /獲取mediator要處理的視圖組件/= 處理Notice =public function listNoticeInterests():Array /列出mediator關(guān)注的通知public function handleNotice( notice:INotice ):void /收到通知進(jìn)行處理/= 生死瞬間處理一下 =public function onAdd( ):void /添加mediator實(shí)例時(shí)public function onRemove( ):void /移除mediator實(shí)例時(shí)4

34、.3 HYPERLINK l h01 Command類包:patterns. media類:public class Command繼承:Command Notifier實(shí)現(xiàn):Command ICommand, INotifierCommand是Controller的助理,負(fù)責(zé)執(zhí)行單個(gè)業(yè)務(wù)邏輯處理通知。由用戶動(dòng)作觸發(fā)一個(gè)通知,該通知由Command的execute方法來處理。4.3.1 屬性無4.3.2 方法public function execute( note:INotice ):void /應(yīng)在子類中override該方法,添加自定義業(yè)務(wù)邏輯,處理通知。4.4 HYPERLINK l

35、h01 Commands類包:patterns. media類:public class Commands繼承:Commands Notifier實(shí)現(xiàn):Commands ICommand, INotifierCommands也是Controller的助理,負(fù)責(zé)執(zhí)行一系列Command處理通知。維護(hù)一個(gè)Command列表subCmds。execute時(shí),Commands會(huì)按順序?qū)嵗痵ubCmds中的Command,并調(diào)用其execute方法。4.4.1 屬性private var subCmds:Array; /Command列表,是個(gè)FIFO表4.4.2 方法/= 創(chuàng)建Commands =p

36、ublic function Commands() /在子類中,不必自定義構(gòu)造函數(shù),而是重寫initializeMacroCommand方法,若想自定義構(gòu)造函數(shù),必須調(diào)用superprotected function initializeCmds():void /在子類中重寫該方法,給Command列表添加Command。注意:Command可以是Command或Commands。protected function addSubCmd( cmdRef:Class ): void /給Command列表添加Command/= 執(zhí)行Commands =public final function

37、execute( note:INotification ) : void /執(zhí)行Command列表中的所有Command,禁止override該方法5 HYPERLINK l h01 observer包用于實(shí)現(xiàn)通知通信機(jī)制。不依賴Flash中的事件模型,而且AS3并沒有內(nèi)置的事件模型。采用觀察者模式,實(shí)現(xiàn)模塊之間的事件驅(qū)動(dòng)通信。Flash事件和PureMVC通知的主要差異是:事件遵循“責(zé)任鏈”模式,在顯示層級(jí)中“冒泡”直到有父組件處理它;而通知遵循“發(fā)布/訂閱”模式。使用通知進(jìn)行通信,PureMVC各模塊之間不需要建立父子關(guān)系。通知并不是事件的替代物。一般情況下,Mediator給其視圖組件添

38、加事件偵聽器,按常用方式處理,然后給目標(biāo)Command廣播Notice,或與其他Mediator通信。Proxy通過廣播Notice,與Command實(shí)例和Mediator通信。5.1 HYPERLINK l h01 Observer類包:patterns. observer類:public class Observer實(shí)現(xiàn):Observer IObserverObserver負(fù)責(zé)保存通知的處理者及其處理方法,收到通知?jiǎng)t告知其處理者處理這個(gè)通知。5.1.1 屬性private var processF:Function; /處理函數(shù)負(fù)責(zé)處理通知private var processO:Object; /處理者負(fù)責(zé)調(diào)用處理通知的方法5.1.2 方法public function Observer( processFunc:Function, processor:Object ) /構(gòu)造函數(shù),設(shè)定處理者和處理函數(shù)/= 讀寫processFunc =public function setPro

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論