《軟件工程》11-補(bǔ)充-設(shè)計(jì)模式_第1頁
《軟件工程》11-補(bǔ)充-設(shè)計(jì)模式_第2頁
《軟件工程》11-補(bǔ)充-設(shè)計(jì)模式_第3頁
《軟件工程》11-補(bǔ)充-設(shè)計(jì)模式_第4頁
《軟件工程》11-補(bǔ)充-設(shè)計(jì)模式_第5頁
已閱讀5頁,還剩60頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

設(shè)計(jì)模式軟件設(shè)計(jì)是一門藝術(shù),是對“變化”的辯證處理:發(fā)現(xiàn)變化,隔離變化,以不變應(yīng)萬變。設(shè)計(jì)模式分類創(chuàng)建模式結(jié)構(gòu)模式行為模式優(yōu)點(diǎn)面向接口編程降低耦合性增加靈活性設(shè)計(jì)模式之Factory-工廠模式客戶類和工廠類分開。客戶任何時(shí)候需要某種產(chǎn)品,只需向工廠請求即可。客戶無須修改就可以接納新產(chǎn)品。缺點(diǎn)是當(dāng)產(chǎn)品修改時(shí),工廠類也要做相應(yīng)的修改。設(shè)計(jì)模式之Factory-工廠模式publicclassFactory{

publicstaticSamplecreator(intwhich){

//產(chǎn)生Sample一般可使用動(dòng)態(tài)類

//裝載裝入類。

if(which==1)

returnnewSampleA();

elseif(which==2)

returnnewSampleB();

}}FACTORYMETHOD-工廠方法定義一個(gè)用于創(chuàng)建對象的接口,讓子類決定實(shí)例化哪一個(gè)類。FactoryMethod使一個(gè)類的實(shí)例化延遲到其子類。

publicabstractclassCarFactory{

publicabstractCarcreator();}publicclassVW1FactoryextendsCarFactory{ publicCarcreator(){

.........

returnnewJetta;

}}publicclassVW2FactoryextendsCarFactory{ publicCarcreator(){

......

returnnewPolo; }}AbstractFactory–抽象工廠提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定它們具體的類。publicabstractclassCarFactory{

publicabstractCarcreator();

publicabstractTruckcreator(Strings);}publicclassVW1FactoryextendsCarFactory{

publicCarcreator(){

.........

returnnewJetta;

}

publicTruckcreator(Strings){

.........

returnnewBigTruck;

}}publicclassVM2extendsCarFactory{

publicCarcreator(){

......

returnnewPolo; }

publicTruckcreator(Strings){

......

returnnewLargeTruck;

}}Builder-建造模式將一個(gè)復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。

建造模式可以強(qiáng)制實(shí)行一種分步驟進(jìn)行的建造過程。publicinterfaceBuilder{

//創(chuàng)建部件A:比如汽車車輪

voidbuildPartA();

//創(chuàng)建部件B:比如方向盤

voidbuildPartB();

//創(chuàng)建部件C:比如發(fā)動(dòng)機(jī)

voidbuildPartC();

//返回最終組裝產(chǎn)品成果(返回最后裝配好的汽車)

//成品的組裝過程不在這里進(jìn)行,而是轉(zhuǎn)移到下面的Director中進(jìn)行。

//從而實(shí)現(xiàn)過程與部件的解耦。

ProductgetResult();}publicclassDirector{

privateBuilderbuilder; publicDirector(Builderbuilder){

this.builder=builder;

}

//將partA,partB,partC最后組成復(fù)雜物件

//汽車的組裝過程

publicvoidconstruct(){

builder.buildPartA();

builder.buildPartB();

builder.buildPartC();

}}PROTOTYPE-原型模式用原型實(shí)例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象。缺點(diǎn)是每一個(gè)類都必須配備一個(gè)克隆方法。其實(shí)是將product和factory功能合二為一了。publicabstractclassAbstractSpoonimplementsCloneable

{

StringspoonName;

publicvoidsetSpoonName(String

spoonName){this.spoonName=spoonName;}

publicStringgetSpoonName(){returnthis.spoonName;}

publicObjectclone()

{

Objectobject=null;

try{

object=super.clone();

}catch(CloneNotSupportedExceptionexception){

System.err.println("AbstractSpoonisnotCloneable");

}

returnobject;

}

}

publicclassSoupSpoonextendsAbstractSpoon

{

publicSoupSpoon()

{

setSpoonName("SoupSpoon");

}

}publicclassSaladSpoonextendsAbstractSpoon

{

publicSaladSpoon()

{

setSpoonName("SaladSpoon");

}

}設(shè)計(jì)模式之Singleton-單例模式保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。解決的主要是性能問題,而非耦合(變化)的問題。publicclassSingleton{

privatestaticSingletoninstance=null;

publicstaticsynchronizedSingletongetInstance(){

//這個(gè)方法不用每次都進(jìn)行生成對象,

//只是第一次使用時(shí)生成實(shí)例,提高了效率!

if(instance==null)

instance=newSingleton();

returninstance;

}}

Adapter-適配器把一個(gè)類的接口變換成客戶端所期待的另一種接口,從而使原本因接口原因不匹配而無法一起工作的兩個(gè)類能夠一起工作。適配類可以根據(jù)參數(shù)返還一個(gè)合適的實(shí)例給客戶端。publicinterfaceIRoundPeg{

publicvoidinsertIntoHole(String

msg);}publicinterfaceISquarePeg{

publicvoidinsert(String

str);}publicclassPegAdapterimplementsIRoundPeg,ISquarePeg{

privateRoundPeg

roundPeg;

privateSquarePeg

squarePeg;

//構(gòu)造方法

publicPegAdapter(RoundPeg

peg){this.roundPeg=peg;}//構(gòu)造方法

publicPegAdapter(SquarePeg

peg){this.squarePeg=peg;}

publicvoidinsert(String

str){

if(roundPeg!=NULL)roundPeg.insertIntoHole(str);

if(squarePeg!=NULL)squarePeg.insert(str); }

publicvoidinsertIntoHole(String

str){ …

SquarePeg.insert(str);}}Bridge-橋梁模式將抽象部分與它的實(shí)現(xiàn)部分(行為)分離,使它們都可以獨(dú)立地變化。解決2個(gè)方面的變化問題:抽象與實(shí)現(xiàn)(行為)。即一個(gè)類中多個(gè)方向的變化問題。publicabstractclassCoffee{

CoffeeImp

coffeeImp;

publicvoidsetCoffeeImp(){

this.CoffeeImp=CoffeeImpSingleton.getTheCoffeImp();

}

publicCoffeeImp

getCoffeeImp(){returnthis.CoffeeImp;}

publicabstractvoidpourCoffee();}publicabstractclassCoffeeImp{ publicabstractvoidpourCoffeeImp();}//bridgepublicclassCoffeeImpSingleton

{privatestaticCoffeeImp

coffeeImp;

publicCoffeeImpSingleton(CoffeeImp

coffeeImpIn)

{this.coffeeImp=coffeeImpIn;}

publicstaticCoffeeImp

getTheCoffeeImp()

{

returncoffeeImp;

}

}//中杯publicclassMediumCoffeeextendsCoffee{

publicMediumCoffee(){setCoffeeImp();}

publicvoidpourCoffee()

{

CoffeeImp

coffeeImp=this.getCoffeeImp();

//我們以重復(fù)次數(shù)來說明是沖中杯還是大杯,重復(fù)2次是中杯

for(inti=0;i<2;i++)

{

coffeeImp.pourCoffeeImp();

}

}}//大杯publicclassSuperSizeCoffeeextendsCoffee{

publicSuperSizeCoffee(){setCoffeeImp();}

publicvoidpourCoffee()

{

CoffeeImp

coffeeImp=this.getCoffeeImp();

//我們以重復(fù)次數(shù)來說明是沖中杯還是大杯,重復(fù)5次是大杯

for(inti=0;i<5;i++)

{

coffeeImp.pourCoffeeImp();

}

}}//加奶publicclassMilkCoffeeImpextendsCoffeeImp{

MilkCoffeeImp(){}

publicvoidpourCoffeeImp()

{

System.out.println("加了美味的牛奶");

}}//不加奶publicclassFragrantCoffeeImpextendsCoffeeImp{

FragrantCoffeeImp(){}

publicvoidpourCoffeeImp()

{

System.out.println("什么也沒加,清香");

}}//拿出牛奶CoffeeImpSingleton

coffeeImpSingleton=newCoffeeImpSingleton(new

MilkCoffeeImp());//中杯加奶MediumCoffee

mediumCoffee=newMediumCoffee();mediumCoffee.pourCoffee();//大杯加奶SuperSizeCoffee

superSizeCoffee=newSuperSizeCoffee();superSizeCoffee.pourCoffee();組合由于繼承原則面向接口編程原則單一職責(zé)原則Liskov替換原則等等Composite-合成模式合成模式把部分與整體關(guān)系用樹結(jié)構(gòu)表示。合成模式使得用戶對單對象和組合對象的使用具有一致性。publicabstractclassEquipment{

privateStringname;

//網(wǎng)絡(luò)價(jià)格

publicabstractdoublenetPrice();

//打折價(jià)格

publicabstractdoublediscountPrice();

//增加部件

publicboolean

add(Equipmentequipment){returnfalse;}

//刪除部件

publicboolean

remove(Equipmentequipment){returnfalse;}

//注意這里,提供一種用于訪問組合部件的方法。

publicIterator

iter(){returnnull;}

publicEquipment(finalStringname){=name;}}

publicclassDiskextendsEquipmentabstractclassCompositeEquipmentextendsEquipmentDECORATOR-裝飾模式一個(gè)類可能有些額外的責(zé)任(除了主體業(yè)務(wù)操作),如加密、緩存、壓縮等,這些可能只是輔助主體業(yè)務(wù)的附著,并不嚴(yán)格按照維度變化。裝飾模式以對客戶端透明的方式擴(kuò)展對象的功能,是繼承關(guān)系的一個(gè)替代方案,提供比繼承更多的靈活性。動(dòng)態(tài)給一個(gè)對象增加功能,這些功能可以再動(dòng)態(tài)的撤消。增加由一些基本功能的排列組合而產(chǎn)生的非常大量的功能。既繼承又組合,實(shí)際上是將Bridge中的抽象和實(shí)現(xiàn)合二為一了,是其特殊形式。publicinterfaceWork{

publicvoidinsert();}publicclassSquarePegimplementsWork{

publicvoidinsert(){

System.out.println(“方形樁插入");

}}publicclassDecoratorimplementsWork{

privateWorkwork;

//額外增加的功能打包在List中

privateArrayListothers=newArrayList();

//在構(gòu)造器中使用組合new方式,引入Work;

publicDecorator(Workwork){

this.work=work;

others.add(“挖坑");

others.add(“釘木板");

}

publicvoidinsert(){

newMethod();

}

//新方法中在insert之前增加其他方法,這里次序先后是用戶靈活指定的

publicvoidnewMethod(){

otherMethod();

work.insert();

}

publicvoidotherMethod(){

ListIterator

listIterator=others.listIterator();

while(listIterator.hasNext())

{

System.out.println(((String)(listIterator.next()))+“正在進(jìn)行");

}

}}Facade–外觀模式外部與一個(gè)子系統(tǒng)的通信必須通過一個(gè)統(tǒng)一的門面對象進(jìn)行。門面模式提供一個(gè)高層次的接口,使得子系統(tǒng)更易于使用。每一個(gè)子系統(tǒng)只有一個(gè)門面類,而且此門面類只有一個(gè)實(shí)例,也就是說它是一個(gè)單例模式。但整個(gè)系統(tǒng)可以有多個(gè)門面類。JDBCFLYWEIGHT

-享元模式享元模式以共享的方式高效的支持大量的細(xì)粒度對象。采用類似于Hash表的方式,共享的思想。客戶端不可以直接創(chuàng)建被共享的對象,而應(yīng)當(dāng)使用一個(gè)工廠對象負(fù)責(zé)創(chuàng)建被共享的對象。享元模式大幅度的降低內(nèi)存中對象的數(shù)量,主要解決OO性能問題。publicclassCD{

privateStringtitle;

privateintyear;

privateArtistartist;

publicStringgetTitle(){returntitle;}

publicint

getYear(){returnyear;}

publicArtistgetArtist(){returnartist;}

publicvoidsetTitle(Stringt){title=t;}

publicvoidsetYear(inty){year=y;}

publicvoidsetArtist(Artista){artist=a;}}publicclassArtist{

//內(nèi)部狀態(tài)

privateStringname;

//notethatArtistisimmutable.

StringgetName(){returnname;}

Artist(Stringn){name=n;}}publicclassArtistFactory{

Hashtablepool=newHashtable();

ArtistgetArtist(Stringkey){

Artistresult; result=(Artist)pool.get(key); //產(chǎn)生新的Artist

if(result==null){

result=newArtist(key);

pool.put(key,result);

}

returnresult; }}PROXY-代理模式代理模式給某一個(gè)對象提供一個(gè)代理對象,并由代理對象控制對源對象的引用。代理就是一個(gè)人或一個(gè)機(jī)構(gòu)代表另一個(gè)人或者一個(gè)機(jī)構(gòu)采取行動(dòng)。代理對象可以在客戶和目標(biāo)對象直接起到中介的作用。客戶端分辨不出代理主題對象與真實(shí)主題對象。代理模式可以并不知道真正的被代理對象,而僅僅持有一個(gè)被代理對象的接口,這時(shí)候代理對象不能夠創(chuàng)建被代理對象,被代理對象必須有系統(tǒng)的其他角色代為創(chuàng)建并傳入。代理者對被代理者的功能進(jìn)行擴(kuò)展(OCP)。ChainofResponsibility–職責(zé)鏈

很多對象由每一個(gè)對象對其下家的引用而接起來形成一條鏈。請求在這個(gè)鏈上傳遞,直到鏈上的某一個(gè)對象決定處理此請求。客戶并不知道鏈上的哪一個(gè)對象最終處理這個(gè)請求,系統(tǒng)可以在不影響客戶端的情況下動(dòng)態(tài)的重新組織鏈和分配責(zé)任。處理者有兩個(gè)選擇:承擔(dān)責(zé)任或者把責(zé)任推給下家。一個(gè)請求可以最終不被任何接收端對象所接受。publicinterfaceHandler{

publicvoidhandleRequest(Requestrequest);}

publicclassRequest{

privateStringtype;

publicRequest(String

type){this.type=type;}

publicStringgetType(){returntype;}

publicvoidexecute(){

//request真正具體行為代碼

}}publicclassConcreteHandlerimplementsHandler{

privateHandlersuccessor;

publicConcreteHandler(Handlersuccessor){

this.successor=successor;

}

publicvoidhandleRequest(Requestrequest){

if(requestinstanceof

HelpRequest){

//這里是處理Help的具體代碼

}elseif(requestinstanceof

PrintRequst){

request.execute();

}else{

//傳送到下一個(gè)

successor.handle(request); } }}COMMAND-命令模式

命令模式把一個(gè)請求或者操作封裝到一個(gè)對象中。命令模式把發(fā)出命令的責(zé)任和執(zhí)行命令的責(zé)任分割開,委派給不同的對象。命令模式允許請求的一方和發(fā)送的一方獨(dú)立開來,使得請求的一方不必知道接收請求的一方的接口,更不必知道請求是怎么被接收,以及操作是否執(zhí)行,何時(shí)被執(zhí)行以及是怎么被執(zhí)行的。系統(tǒng)支持命令的撤消。解耦服務(wù)的調(diào)用者與服務(wù)提供者,請求方只知道execute即可。publicinterfaceCommand{

publicabstractvoidexecute();}publicclassproducer{

publicstaticListproduceRequests(){

Listqueue=newArrayList();

queue.add(newDomesticEngineer());

queue.add(newPolitician());

queue.add(newProgrammer());

returnqueue;

}}publicclassTestCommand{

publicstaticvoidmain(String[]args){

Listqueue=PduceRequests();

for(Iteratorit=queue.iterator();it.hasNext();) //取出List中的內(nèi)容,其他特征不能確定,只能保證一個(gè)特征是100%正確,

//他們至少是界面Command的“兒子”。所以強(qiáng)制轉(zhuǎn)換類型為Command

((Command)it.next()).execute();

}}INTERPRETER-解釋器模式給定一個(gè)語言后,解釋器模式可以定義出其文法的一種表示,并同時(shí)提供一個(gè)解釋器。客戶端可以使用這個(gè)解釋器來解釋這個(gè)語言中的句子。解釋器模式將描述怎樣在有了一個(gè)簡單的文法后,使用模式設(shè)計(jì)解釋這些語句。在解釋器模式里面提到的語言是指任何解釋器對象能夠解釋的任何組合。在解釋器模式中需要定義一個(gè)代表文法的命令類的等級(jí)結(jié)構(gòu),也就是一系列的組合規(guī)則。每一個(gè)命令對象都有一個(gè)解釋方法,代表對命令對象的解釋。命令對象的等級(jí)結(jié)構(gòu)中的對象的任何排列組合都是一個(gè)語言。ITERATOR-迭代子模式迭代子模式可以順序訪問一個(gè)聚集中的元素而不必暴露聚集的內(nèi)部表象。多個(gè)對象聚在一起形成的總體稱之為聚集,聚集對象是能夠包容一組對象的容器對象。迭代子模式將迭代邏輯封裝到一個(gè)獨(dú)立的子對象中,從而與聚集本身隔開。迭代子模式簡化了聚集的界面。每一個(gè)聚集對象都可以有一個(gè)或一個(gè)以上的迭代子對象,每一個(gè)迭代子的迭代狀態(tài)可以是彼此獨(dú)立的。迭代算法可以獨(dú)立于聚集角色變化。//遍歷Collection中內(nèi)容publicclassTestCommand{

publicstaticvoidmain(String[]args){

Listqueue=PduceRequests();

for(Iteratorit=queue.iterator();it.hasNext();)

((Command)it.next()).execute();

}}MEDIATOR-調(diào)停者模式調(diào)停者模式包裝了一系列對象相互作用的方式,使得這些對象不必相互明顯作用。從而使他們可以松散偶合。當(dāng)某些對象之間的作用發(fā)生改變時(shí),不會(huì)立即影響其他的一些對象之間的作用。保證這些作用可以彼此獨(dú)立的變化。調(diào)停者模式將多對多的相互作用轉(zhuǎn)化為一對多的相互作用。調(diào)停者模式將對象的行為和協(xié)作抽象化,把對象在小尺度的行為上與其他對象的相互作用分開處理。架構(gòu)級(jí)模式,F(xiàn)a?ade解決子系統(tǒng)間的問題,Mediator解決子系統(tǒng)內(nèi)(對象間)復(fù)雜問題。publicinterfaceMediator{}publicclassConcreteMediatorimplementsMediator{

//假設(shè)當(dāng)前有兩個(gè)成員

privateConcreteColleague1colleague1=newConcreteColleague1();

privateConcreteColleague2colleague2=newConcreteColleague2();

...}

publicclassColleague{

privateMediatormediator;

publicMediatorgetMediator(){

returnmediator; }

publicvoidsetMediator(Mediatormediator){

this.mediator=mediator; }}publicclassConcreteColleague1{}publicclassConcreteColleague2{}MEMENTO-備忘錄模式備忘錄對象是一個(gè)用來存儲(chǔ)另外一個(gè)對象內(nèi)部狀態(tài)的快照的對象。備忘錄模式的用意是在不破壞封裝的條件下,將一個(gè)對象的狀態(tài)捉住,并外部化,存儲(chǔ)起來,從而可以在將來合適的時(shí)候把這個(gè)對象還原到存儲(chǔ)起來的狀態(tài)。publicclassOriginator{ privateintnumber; privateFilefile=null;

publicOriginator(){}

//創(chuàng)建一個(gè)Memento publicMementogetMemento(){

returnnewMemento(this); }

//恢復(fù)到原始值

publicvoidsetMemento(Mementom){

number=m.number;

file=m.file; }}privateclassMementoimplementsjava.io.Serializable{

privateintnumber;

privateFilefile=null;

publicMemento(Originatoro){

number=o.number;

file=o.file;

}}OBSERVER-觀察者模式觀察者模式定義了一種一對多的依賴關(guān)系,讓多個(gè)觀察者對象同時(shí)監(jiān)聽某一個(gè)主題對象。這個(gè)主題對象在狀態(tài)上發(fā)生變化時(shí),會(huì)通知所有觀察者對象,使他們能夠自動(dòng)更新自己。publicclassproductextendsObservable{ privateStringname;

privatefloatprice;

publicStringgetName(){returnname;}

publicvoidsetName(){

=name;

//設(shè)置變化點(diǎn)

setChanged();

notifyObservers(name); }

}publicclassNameObserverimplementsObserver{

privateStringname=null;

publicvoidupdate(Observable

obj,Object

arg){

if(arg

instanceofString){

name=(String)arg;

//產(chǎn)品名稱改變值在name中

System.out.println("NameObserver:namechangedto"+name);

}

}}STATE-狀態(tài)模式狀態(tài)模式允許一個(gè)對象在其內(nèi)部狀態(tài)改變的時(shí)候改變行為。這個(gè)對象看上去象是改變了它的類一樣。狀態(tài)模式把所研究的對象的行為包裝在不同的狀態(tài)對象里,每一個(gè)狀態(tài)對象都屬于一個(gè)抽象狀態(tài)類的一個(gè)子類。狀態(tài)模式的意圖是讓一個(gè)對象在其內(nèi)部狀態(tài)改變的時(shí)候,其行為也隨之改變。狀態(tài)模式需要對每一個(gè)系統(tǒng)可能取得的狀態(tài)創(chuàng)立一個(gè)狀態(tài)類的子類。當(dāng)系統(tǒng)的狀態(tài)變化時(shí),系統(tǒng)便改變所選的子類。管理類在不同狀態(tài)下的行為。publicclassBlueStateextendsState{ publicvoidhandlepush(Contextc){

//根據(jù)push方法“如果是blue狀態(tài)的切換到green”;

c.setState(new

GreenState());

}

publicvoidhandlepull(Contextc){

//根據(jù)pull方法“如果是blue狀態(tài)的切換到red”;

c.setState(new

RedState()); }

publicabstractvoidgetcolor(){return(Color.blue);}}publicclassContext{ privateSatestate=null;//將原來的Colorstate改成了新建的Statestate; //setState是用來改變state的狀態(tài),使用setState實(shí)現(xiàn)狀態(tài)切換

pulicvoidsetState(Statestate){

this.state=state; } publicvoidpush(){

//狀態(tài)切換細(xì)節(jié),本例是顏色變化,封裝在子類handlepush中,此處無需關(guān)心

state.handlepush(this);

//因?yàn)閟ample要使用state中的一個(gè)切換結(jié)果,使用getColor()

Samplesample=newSample(state.getColor());

sample.operate(); } publicvoidpull(){

state.handlepull(this);

Sample2sample2=newSample2(state.getColor());

sample2.operate();

}}STRATEGY-策略模式策略模式針對一組算法,將每一個(gè)算法封裝到具有共同接口的獨(dú)立的類中,從而使得它們可以相互替換。策略模式使得算法可以在不影響到客戶端的情況下發(fā)生變化。策略模式把行為和環(huán)境分開。環(huán)境類負(fù)責(zé)維持和查詢行為類,各種算法在具體的策略類中提供。由于算法和環(huán)境獨(dú)立開來,算法的增減,修改都不會(huì)影響到環(huán)境和客戶端。與State較象,類中封裝算法,定義一組算法。publicabstractclassRepTempRule{

protectedStringoldString="";

publicvoidsetOldString(String

oldString){

this.oldString=oldString;

}

protectedStringnewString="";

publicStringgetNewString(){

returnnewString;

}

publicabstractvoidreplace()throwsException;}publicclasstest{ ...... publicvoidtestReplace(){

//使用第一套方案進(jìn)行替換

RepTempRulerule=newRepTempRuleOne();

rule.setOldString(record);

rule.replace();

} .....}TE

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論