《軟件設(shè)計(jì)模式(Java版)》課件 第2、3章 創(chuàng)建型模式(上下)_第1頁(yè)
《軟件設(shè)計(jì)模式(Java版)》課件 第2、3章 創(chuàng)建型模式(上下)_第2頁(yè)
《軟件設(shè)計(jì)模式(Java版)》課件 第2、3章 創(chuàng)建型模式(上下)_第3頁(yè)
《軟件設(shè)計(jì)模式(Java版)》課件 第2、3章 創(chuàng)建型模式(上下)_第4頁(yè)
《軟件設(shè)計(jì)模式(Java版)》課件 第2、3章 創(chuàng)建型模式(上下)_第5頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

內(nèi)容簡(jiǎn)介·

本章教學(xué)目標(biāo):掌握單例模式與原型模式的定義與特點(diǎn)、結(jié)構(gòu)與實(shí)現(xiàn);熟悉使用單例模式與原型模式開發(fā)應(yīng)用程序;了解創(chuàng)建型模式的特

點(diǎn)和

與擴(kuò)

。·本章價(jià)值引領(lǐng):通過(guò)介紹單例模式的優(yōu)點(diǎn),培養(yǎng)學(xué)生提高資源利用率和數(shù)據(jù)可靠性

識(shí);通過(guò)孫悟空實(shí)例,提高學(xué)生文化強(qiáng)國(guó)意識(shí)和為中國(guó)動(dòng)漫產(chǎn)業(yè)盡一份

力的思想;通過(guò)介紹原型模式的主要優(yōu)點(diǎn),提高學(xué)生的科學(xué)創(chuàng)新與科技強(qiáng)國(guó)的

方法。軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(www.ptpress.com.cn

和www.ptpedu.com.cn)ISBN:978-7-115-47788-02.1

創(chuàng)建型模式概述·

創(chuàng)建型模式的主要特點(diǎn)是什么?它的主要特點(diǎn)是“將對(duì)象的創(chuàng)建與使用分離”

,這樣可以降低系統(tǒng)的耦合度?!?chuàng)建型模式分為以下幾種:(1)

單例(Singleton)

模式:某個(gè)類只能生成一個(gè)實(shí)例,該類提供了一個(gè)全

局訪問(wèn)點(diǎn)供外部獲取該實(shí)例,其拓展是有限多例模式。(2)

原型(Prototype)模

式:將一個(gè)對(duì)象作為原型,通過(guò)對(duì)其進(jìn)行復(fù)制而克

隆出多個(gè)和原型類似的新實(shí)例。(3)

工廠方法

(Factory

Method)

模式:定義一個(gè)用于

創(chuàng)建產(chǎn)品的接口,由子

類決定生產(chǎn)什么產(chǎn)品。(4)

抽象工廠(Abstract

Factory)

模式:提供一個(gè)創(chuàng)建產(chǎn)品族的接口,其每

個(gè)子類可以生產(chǎn)一系列相關(guān)的產(chǎn)品。(5)

建造者

(Builder)模

式:將一個(gè)復(fù)雜對(duì)象分解成多個(gè)相對(duì)簡(jiǎn)單的部分,

然后根據(jù)不同需要分別創(chuàng)建它們,最后構(gòu)建成該復(fù)雜對(duì)象。軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(www.ptpress.com.cn和

www.ptpedu.com.cn)ISBN:978-7-115-47788-02.2單例

(Singleton)模式·

2.2.1模式的定義與特點(diǎn)定義:指一個(gè)類只有一個(gè)實(shí)例,且該類能自行創(chuàng)建這個(gè)實(shí)例的一

種模式。例如,Windows中的任務(wù)管理器、回收站等。特點(diǎn):1)單例類只有一個(gè)實(shí)例對(duì)象;2)該單例對(duì)象必須由單例

類自行創(chuàng)建;3)單例類對(duì)外提供一個(gè)訪問(wèn)該單例的全局訪問(wèn)點(diǎn)?!?.2.2模式的結(jié)構(gòu)與實(shí)現(xiàn)1.模式的結(jié)構(gòu)單例模式的主要角色有:(1)

單例類:包含一個(gè)實(shí)例且能自行創(chuàng)建這個(gè)實(shí)例的類。(2)

訪問(wèn)者類:使用單例的類。其結(jié)構(gòu)圖如下:軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(www.ptpress.com.cn

和www.ptpedu.com.cn)

ISBN:978-7-115-47788-0《單例類》Singleton-instance:Singleton-Singleton()+getlnstance():Singleton#instance:SingletonpublicstaticsynchronizedSingletongetlnstance(){if(instance==null){//

用懶漢方式實(shí)現(xiàn)instance=new

Singleton();}else{System.out.println("單例對(duì)象已經(jīng)創(chuàng)建!");return

instance;·2.2.2模式的結(jié)構(gòu)與實(shí)現(xiàn)1.模式的結(jié)構(gòu)(續(xù))普通類的構(gòu)造函數(shù)是公有的,

外部類可以通過(guò)

“new

構(gòu)造函數(shù)

()”來(lái)生成多個(gè)實(shí)例。但是,如

果將類的構(gòu)造函數(shù)設(shè)為私有的,外部類就無(wú)法調(diào)用它生成多個(gè)實(shí)

例了。這時(shí)該類自身必須定義一

個(gè)靜態(tài)私有實(shí)例,并向外提供一

個(gè)靜態(tài)的公有函數(shù)用于創(chuàng)建或獲

取該靜態(tài)私有實(shí)例,有2種常見(jiàn)的

實(shí)現(xiàn)形式。軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(www.ptpress.com.cn

www.ptpedu.com.cn)

ISBN:978-7-115-47788-02.2單例

(Singleton)

模式(續(xù))《訪問(wèn)類》Client2.2單例

(Singleton)

模式(續(xù))·第1種:懶漢式單例該模式的特點(diǎn)是類加載時(shí)沒(méi)有生成單例,只有當(dāng)?shù)谝淮握{(diào)用getlnstance

方法

時(shí)才去創(chuàng)建這個(gè)單例。代碼如下:public

class

LazySingleton{pr

ivate

static

volatile

LazySingleton

instance=null;//保

證instance在所有線程中同步private

LazySingleton(){}//private

避免類在外部被實(shí)例化public

static

synchronized

LazySingletongetInstance(){//getInstance

方法前加同步if(instance==null){

instance=new

LazySingleton();}return

instance;軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱人民郵電出版社(www.ptpress.com.cn

和www.ptpedu.com.cn)

ISBN:978-7-115-47788-02.2單例

(Singleton)

模式(續(xù))·第2種:餓漢式單例該模式的特點(diǎn)是類一旦加載就創(chuàng)建一個(gè)單例,保證在調(diào)用getlnstance

方法之

前單例已經(jīng)存在了。public

class

HungrySingleton{privatestatic

finalHungrySingleton

instance

=newHungrySingleton();privateHungrySingleton(){}public

static

HungrySingleton

getlnstance(){returninstance;軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

教學(xué)資源網(wǎng)址:http://www.ryjiaoyu.com/book/details/8402·2.2.3模式的應(yīng)用實(shí)例【例2.1】

用懶漢式單例模式模擬華強(qiáng)智能有限公司的工會(huì)組織的成立。分析:

因?yàn)橐粋€(gè)公司

的工會(huì)組織只要求一個(gè),

所以可以用單例模式來(lái)實(shí)

現(xiàn),右邊是用懶漢式單例

實(shí)現(xiàn)的結(jié)構(gòu)圖:public

static

synchronized

TradeUnion

getlnstance(Kif(instance==null){instance=new

TradeUnion();//創(chuàng)建實(shí)例}else{System.out.println("

工會(huì)組織已經(jīng)成立,不需要重復(fù)創(chuàng)建。");return

instance;軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

教學(xué)資源網(wǎng)址:http://www.ryjiaoyu.com/book/details/84022.2單例

(Singleton)

模式(續(xù))單例類TradeUnion-instance:TradeUnion-TradeUnion()+getlnstance():TradeUnion訪問(wèn)類n201SingletonLazy+main(String[]args):void注:程序代碼見(jiàn)附件。2.2單例

(Singleton)

模式(續(xù))·2.2.3模式的應(yīng)用實(shí)例

JPanel【例2.2】

用餓漢式單例模式模擬資源管理器的創(chuàng)

。分析:一個(gè)軟件系統(tǒng)的資源管理器通常只需創(chuàng)建

一個(gè),所以本實(shí)例同樣適

合用單例模式實(shí)現(xiàn),右邊

是用餓漢式單例實(shí)現(xiàn)的結(jié)

構(gòu)

:?jiǎn)卫怰esourceManager-instance:ResourceManager=new

ResourceManager();-ResourceManager()+getlnstance():ResourceManagerpublicstatic

ResourceManagergetlnstance(){軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

教學(xué)資源網(wǎng)址:/book/details/8402訪問(wèn)類n202SingletonEager+main(Stringl

args)注:程序代碼見(jiàn)附件。return

instance;·

2.2.3模式的應(yīng)用實(shí)例【例2

.2】

用餓漢

式單例模式模擬資

源管理器的創(chuàng)建。右邊是程序的運(yùn)行結(jié)果:資

-

Eclipse

餓漢單例模式測(cè)試文件(F)編輯(E)瀏覽(N)

搜索(A)項(xiàng)項(xiàng)目資源管理器3vDesignPatternCode√

chapter01.principle>DN102LSPtest.java>DN103DIPtest.java>DN105ISPtestjava>DN106LoDtest.java>B

chapter02.protoTypev由

chapter02.singleton>國(guó)N201SingletonLazy.j>D

N202SingletonEagerResourceManager.jp軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

學(xué)

網(wǎng)

:/book/details/84022.2單例

(Singleton)

模式(續(xù))實(shí)例ot2.2單例

(Singleton)

模式(續(xù))·2.2.4模式的應(yīng)用場(chǎng)景前面我們分析了單例模式的結(jié)構(gòu)與特點(diǎn),現(xiàn)在來(lái)看看它通常適用

的以下場(chǎng)景的特點(diǎn):(1)在應(yīng)用場(chǎng)景中,某類只要求生成一個(gè)對(duì)象的時(shí)候。如:

一個(gè)

班中的班長(zhǎng)、每個(gè)人的身份證號(hào)等;(2)

當(dāng)對(duì)象需要被共享的場(chǎng)合。由于單例模式只允許創(chuàng)建一個(gè)對(duì)

象,共享該對(duì)象可以節(jié)省內(nèi)存,并加快對(duì)象訪問(wèn)速度。如:WEB中的

配置對(duì)象、數(shù)據(jù)庫(kù)的連接池等。(3)

當(dāng)某類需要頻繁實(shí)例化,而創(chuàng)建的對(duì)象又頻繁被銷毀的時(shí)候。

如:多線程的線程池、

網(wǎng)絡(luò)連接池等。軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(和

ww)·2.2.5模式的擴(kuò)展單例模式可擴(kuò)展為有限的多例(Multiton)

模式,這種模式可生成有限

個(gè)實(shí)例并保存在ArrayList

中,客戶

需要時(shí)可隨機(jī)獲取,

其結(jié)構(gòu)圖如右:static{for(int

i=0;i<n;i++){list.add(new

Multiton(i));public

static

Multiton

getRandomlnstance(){int

value

=(int)(Math

.random()*n);return

list.get(value);軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(

和)2.2單例

(Singleton)

模式(續(xù))《多例類》Multiton-list:ArrayList<Multiton>;-Multiton(n:int)+getRandomlnstance():Multiton《訪問(wèn)類》Client

#instance:Multiton2.3原型

(Prototype)

模式·

2.3.1模式的定義與特點(diǎn)定義:用一個(gè)已經(jīng)創(chuàng)建的實(shí)例作為原型,通過(guò)拷貝該原型對(duì)象來(lái)

創(chuàng)建一個(gè)和原型相同或相似的新對(duì)象。在這里,原型實(shí)例指定了要?jiǎng)?chuàng)

建的對(duì)象的種類。如:Windows中

的COPY操作。特點(diǎn):創(chuàng)建對(duì)象非常高效,根本無(wú)需知道對(duì)象創(chuàng)建的細(xì)節(jié)。·

2.3.2模式的結(jié)構(gòu)與實(shí)現(xiàn)1.模式的結(jié)構(gòu)原型模式包含以下主要角色:(1)抽象原型類:規(guī)定了具體原型對(duì)象必須實(shí)現(xiàn)的接口。(2)

具體原型類:實(shí)現(xiàn)抽象原型類的clone方法,它可被復(fù)制。(3)

訪問(wèn)者類:使用具體原型類中的clone

方法來(lái)復(fù)制新的對(duì)象。軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(.cn

和)2.3原型

(Prototype)

模式(續(xù))·2.3.2模式的結(jié)構(gòu)與實(shí)現(xiàn)1.模式的結(jié)構(gòu)(續(xù))其結(jié)構(gòu)圖如下:軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(和)Realizetype

obj1=newRealizetype();Realizetypeobj2=(Realizetype)obj

1.clone();《具體原型類》Realizetype+clone():Realizetype《訪問(wèn)類》PrototypeTest+main():voidPrototype+clone():Prototype2.3原型

(Prototype)

模式(續(xù))·2.3.2模式的結(jié)構(gòu)與實(shí)現(xiàn)2.模式的實(shí)現(xiàn)原型模式的克隆分為淺克隆和深克隆,Java中的Object

類提供了

淺克隆的clone()方法,具體原型類只要實(shí)現(xiàn)Cloneable接口就可實(shí)現(xiàn)

對(duì)象的淺克隆,這里的Cloneable

接口就是抽象原型類。//其實(shí)現(xiàn)代碼見(jiàn)附件軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(www.ptpre

和)注:程序代碼見(jiàn)附件軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(www.ptpress.com.cn

www.ptpedu.com.cn)分析:孫悟空拔下猴毛輕輕一吹就變出很多

孫悟空,這實(shí)際上是用

到了原型模式,右邊是

其結(jié)構(gòu)圖:·

2.3.3模式的應(yīng)用實(shí)例【例2.3】

用原型模式模擬“孫悟空”復(fù)制自

。2.3原型

(Prototype)

模式(續(xù))《原型類》SunWukong+SunWukong()+clone():ObjectJPanelCloneable+clone():Object《訪問(wèn)類》ProtoTypewukong+main(String[]args):voidSunWukong

obj1=new

SunWukong();SunWukong

obj2=(SunWukong)obj1.clone();DProtoTypeWukong.java

×④import

java.awt.*;□classSunWukongextends

JPanel

implements

CloneableprivatestaticfinallongserialversionUID=5543049531872119328L;

publicSunhukong()原型模式測(cè)試ProtoTypeTest.javaJProtoTypeWukong.javaD

SingletonEager.javaint1n(

“兩加相Wukong.jpg□JRE系統(tǒng)庫(kù)[JavaSE-1.6]Chapter03Sunwukong

obj1=new

Sunwukong();問(wèn)題@

Javadoc聲

臺(tái)×ProtoTypeWukong[Java應(yīng)用程序C:\ProgramFilesJava\jre6\bin\javaw.exe(2017-3-16

午·

2.3.3模式的應(yīng)用實(shí)例【例2.3】

用原型模式模擬“孫悟空”復(fù)制

。//右邊是程序的運(yùn)行結(jié)

:軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(www.ptpre

和)2.3原型

(Prototype)

模式(續(xù))J

ProtoTypeCitation.java

J

ProtoTypeShape.javaJ

SingletonLazyjava

Bajie.jpg·2.3.3模式的應(yīng)用實(shí)例【例2.4】

用原型模式生成“三好學(xué)生”獎(jiǎng)狀。分析:同一學(xué)校的“三好學(xué)生”獎(jiǎng)狀除了獲獎(jiǎng)人姓名

不同,其他都相同,屬于相

似對(duì)象的復(fù)制,同樣可以用

原型模式創(chuàng)建,然后再做簡(jiǎn)

單修改就可以了,右邊是其

結(jié)構(gòu)圖:《獎(jiǎng)狀類》citation#name:String#info:String#college:String+citation(Sting

name,String

info,String

college)+clone():Object+setName(String

name):void+getName():String

citation

obj2=(citation)obj1.clone();+display():void注:程序代碼見(jiàn)附件軟件設(shè)計(jì)模式(Java

)

、

細(xì)

人民郵電出版社(www.ptpress.com.cn

www.ptpedu.com.cn)2.3原型

(Prototype)

模式(續(xù))《訪問(wèn)類》ProtoTypecitatio+main(String[]args):voidCloneable+clone():Object2.3原型(Prototype)

模式(續(xù))·

2.3.4模式的應(yīng)用場(chǎng)景原型模式通常適用以下場(chǎng)景:1)對(duì)象之間相同或相似,即只是個(gè)別的幾個(gè)屬性不同的時(shí)候。2)對(duì)象的創(chuàng)建過(guò)程比較麻煩,但克隆比較簡(jiǎn)單時(shí)候。軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(www.ptpre

和)《抽象原型》Prototype+clone():Prototype《具體原型》Realizetype1

《具體原型》Realizetype2+clone():Prototype

+clone():Prototype《原型管理器》PrototypeManager-hp:HashMap<Sting,Prototype>

+put(String

id,Prototype

p):void

+get(Stringid):Prototype《訪問(wèn)類》Client#m:PrototypeManager#pt1:Prototype+getPrototype(Stringid)·2.3.5模式的擴(kuò)展原型模式可擴(kuò)展為帶原型管理器的原型模式,它在原型模式的基礎(chǔ)上

增加了一個(gè)原型管理器

類。該類用HashMap保存

多個(gè)原型的拷貝,Client

類可以通過(guò)管理

器的get(String

id)方

法從中獲取原型的拷貝,

其結(jié)構(gòu)圖如右:軟件設(shè)計(jì)模式(Java

)

、

細(xì)

人民郵電出版社(www.ptpress.com.cn

www.ptpedu.com.cn)2.3原型

(Prototype)

模式(續(xù))pt1=m.get(id);分析:

本實(shí)例中由于存在不同的圖形類,如:“圓”和“正方形”,它

們計(jì)算面積的方法不一樣,

所以需要用一個(gè)原型管理

器來(lái)管理它們,右邊是其

結(jié)構(gòu)圖:注:程序代碼見(jiàn)附件【例2

.5】

用帶原型管

理器的原型模式來(lái)生成包

含“圓”和“正方形”等

圖形的原型。Cloneable《原型管理器》ProtoTypeManager+clone():Object

-hp:HashMap<Sting,Shape>+addshape(StringkeyShapeobj):void

+getShape(Stringkey):Shape軟件設(shè)計(jì)模式(Java

)

、

細(xì)

人民郵電出版社(www.ptpress.com.cn

www.ptpedu.com.cn)2.3原型

(Prototype)

模式(續(xù))ProtoTypeManagerpm=new

ProtoTypeManager();

Shapeobj1=(Circle)pmgetShape("Circle");obj1.countArea();Shapeobj2=(Shape)pm.getShape("Square");《訪問(wèn)類》ProtoTypeshape+main(String[]args):void《具體原型》Square+clone():Object+countArea():void《具體原型》Circle+clone():Object+countArea()voidShape+clone():Object+countArea():voidobj2.countArea();2.4本章小結(jié)·

本章主要介紹了創(chuàng)建型模式的特點(diǎn)和分類,以及單例模式與原型模

式的定義與特點(diǎn)、結(jié)構(gòu)與實(shí)現(xiàn)、應(yīng)用場(chǎng)景和模式的擴(kuò)展,并通過(guò)多

個(gè)應(yīng)用實(shí)例來(lái)說(shuō)明模式的使用方法。·

習(xí)

:見(jiàn)教材。軟件設(shè)計(jì)模式(Java版

)(ISDN:9787564740634)

、作者:程細(xì)柱本章節(jié)結(jié)束,再見(jiàn)!軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(和

)內(nèi)容簡(jiǎn)介·

本章教學(xué)目標(biāo):掌握工廠方法模式、抽象工廠模式、建造者模式的定義與特點(diǎn)、結(jié)

構(gòu)與實(shí)

現(xiàn);學(xué)會(huì)使用工廠方法模式、抽象工廠模式、建造者模式開發(fā)應(yīng)用程序;明白工廠方法模式、抽象工廠模式、建造者模式的應(yīng)用場(chǎng)景與擴(kuò)展

向?!?/p>

本章價(jià)值引領(lǐng):結(jié)合工廠方法模式的特點(diǎn),介紹提高國(guó)產(chǎn)軟件開發(fā)效率的重要性;利用工廠方法模式和抽象工廠模式的應(yīng)用實(shí)例介紹培養(yǎng)學(xué)生愛(ài)國(guó)情

懷的重要性;利用建造者模式的應(yīng)用實(shí)例,提高學(xué)生的品牌建設(shè)意識(shí)和科技強(qiáng)國(guó)的責(zé)任感與使命感。軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(www.ptpress.com.cn

和www.ptpedu.com.cn)ISBN:978-7-115-47788-03.1工廠方法

(Factory

Method)

模式·

3.1.1模式的定義與特點(diǎn)定義

:定義一個(gè)創(chuàng)建產(chǎn)品對(duì)象的工廠接口,將產(chǎn)品對(duì)象的實(shí)際創(chuàng)建工作推遲到具體子工廠類當(dāng)中。這滿足創(chuàng)建型模式中所要求的“創(chuàng)

建與使用相分離”的特點(diǎn)。如果要?jiǎng)?chuàng)建的產(chǎn)品不多,只要一個(gè)工廠類

就可以完成,這種模式叫“簡(jiǎn)單工廠模式”,它不屬于GoF的23種經(jīng)

典設(shè)計(jì)模式,它的缺點(diǎn)是增加新產(chǎn)品時(shí)會(huì)違背“開閉原則”,本書不

。優(yōu)點(diǎn):1)用戶知道具體工廠的名稱就可得到所要的產(chǎn)品,

無(wú)須

知道產(chǎn)品的創(chuàng)建過(guò)程;2)增加新的產(chǎn)品時(shí)只需要添加具體產(chǎn)品類和

對(duì)應(yīng)的具體工廠類,無(wú)需修改源代碼,

滿足開閉原則。缺點(diǎn):每增加一個(gè)產(chǎn)品就要增加一個(gè)具體產(chǎn)品類和一個(gè)對(duì)應(yīng)的具

體工廠類,這增加了系統(tǒng)的復(fù)雜度。軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(www.ptpress.com.cn

和www.ptpedu.com.cn)

ISBN:978-7-115-47788-03.1工廠方法

(Factory

Method)

模式(續(xù))·3.1.2模式的結(jié)構(gòu)與實(shí)現(xiàn)1.模式的結(jié)構(gòu)工廠方法模式的主要角色有:1)抽象工廠(Abstract

Factory):

提供了創(chuàng)建產(chǎn)品的接口,調(diào)用

者通過(guò)它訪問(wèn)具體工廠的工廠方法newProduct()來(lái)創(chuàng)建產(chǎn)品。2)

具體工廠(Concrete

Factory):

主要是實(shí)現(xiàn)抽象工廠中的抽象

方法,完成具體產(chǎn)品的創(chuàng)建。3)

抽象產(chǎn)品(Product):

定義了產(chǎn)品的規(guī)范,描述了產(chǎn)品的主要

特性和功能。4)

具體產(chǎn)品(Concrete

Product):

實(shí)現(xiàn)了抽象產(chǎn)品角色所定義的

接口,由具體工廠來(lái)創(chuàng)建,它同具體工廠之間一一對(duì)應(yīng)。軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(www.ptpress.com.cn

和www.ptpedu.com.cn)

ISBN:978-7-115-47788-0·

3.1.2模式的結(jié)構(gòu)與實(shí)現(xiàn)1.模式的結(jié)構(gòu)右邊是其結(jié)構(gòu)圖:3.1工廠方法

(Factory

Method)

模式(續(xù))2.模式的實(shí)現(xiàn)//該模式的實(shí)現(xiàn)

代碼見(jiàn)附件軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(www.ptpress.com.cn

和www.ptpedu.com.cn)

ISBN:978-7-115-47788-0ConcreteProduct1+show():void《create》ConcreteProduct2+show():voidConcreteFactory2+newProduct():ProductConcreteFactory1+newProduct():Product《create》Client分析:有很多種類的

畜牧場(chǎng),如養(yǎng)馬場(chǎng)用于養(yǎng)

馬,養(yǎng)牛場(chǎng)用于養(yǎng)牛。所

以該實(shí)例用工廠方法模式比較適合,右邊是其結(jié)構(gòu)

。注:程序代碼見(jiàn)附件HorseFarmCattleFarmHorse+newAnimal():Animal+newAnimal():Animal+Horse()+show():void《cr

teate》_·

3.1.3模式的應(yīng)用實(shí)例【例3.1】用工廠方法模式設(shè)計(jì)畜牧場(chǎng)生養(yǎng)動(dòng)物的實(shí)

。3.1工廠方法

(Factory

Method)

模式(續(xù))軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱人民郵電出版社(www.ptpress.com.cn

和www.ptpedu.com.cn)

ISBN:978-7-115-47788-0Cattle+Cattle()+show():void《create》Client·

3.1.3模式的應(yīng)用實(shí)例【例3.1】用工廠方法模式設(shè)計(jì)畜牧場(chǎng)

生養(yǎng)動(dòng)物的實(shí)例。右邊是程序的運(yùn)行結(jié)果srcJRE系統(tǒng)庫(kù)[JavaSE-1.6]Chapter03src串

AbstractFactory串

Builder安FactoryMethodJAbstractFactoryTestjavaD

AnimalFarmTestjavaD

ReadXML1.javaD

ReadXML2.java@config1.xml◎

config2.xmlA_Cattle.jpgA_Horse.jpgA_Pig.jpgP_Fruitage.jpg控制臺(tái)

×AnimalFarmTest(1)[Java應(yīng)用程序

C:\Pro新類名:FactoryMethod.HorseFarm新馬出生!3.1工廠方法

(Factory

Method)

模式(續(xù))包資源管理器

config2.xml×軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

教學(xué)資源網(wǎng)址:http://www.ryjiaoyu.com/book/details/8402<?xmlversion=

"1.0”encoding="UTF-8"?<config><className>HorseFarm</className></config>3.1工廠方法

(Factory

Method)

模式(續(xù))·

3.1.4模式的應(yīng)用場(chǎng)景工廠方法模式通常適用以下場(chǎng)景:1

)

戶只知道創(chuàng)建產(chǎn)品的工廠名,而不知道具體的產(chǎn)品名。如

TCL電視工廠、海信電視工廠等;2

)

創(chuàng)建對(duì)象的任務(wù)由多個(gè)具體子工廠中的某一個(gè)完成,而抽象工

廠只提供創(chuàng)建產(chǎn)品的接口。3)客戶不關(guān)心創(chuàng)建產(chǎn)品的細(xì)節(jié),只關(guān)心產(chǎn)品的品牌。軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

教學(xué)資源網(wǎng)址:http://www.ryjiaoyu.com/book/details/8402·3.1.5模式的擴(kuò)展當(dāng)需要生成的產(chǎn)品不多且不會(huì)增加,一個(gè)具體工廠類就可以完成

任務(wù)時(shí),可刪除抽象工

廠類。這時(shí)工廠方法模

式將退化到簡(jiǎn)單工廠模

式,其結(jié)構(gòu)圖如右:ProductConcreteProduct1

ConcreteProduct2《create》

《create》Factory+factoryMethod():Product3.1工廠方法

(Factory

Method)

模式(續(xù))軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

教學(xué)資源網(wǎng)址:http://www.ryjiaoyu.com/book/details/8402Client在前面介紹的工廠方法模式只

考慮生產(chǎn)同等級(jí)的產(chǎn)品,但是在現(xiàn)

實(shí)生活中許多工廠是綜合型的工廠,

能生產(chǎn)多等級(jí)(種類)的產(chǎn)品,如

農(nóng)場(chǎng)里既養(yǎng)動(dòng)物又種植物,電器廠

既生成電視機(jī)又生成洗衣機(jī)或空調(diào),

大學(xué)既有軟件專業(yè)又有生物專業(yè)等

等。本節(jié)要介紹的抽象工廠模式將考慮多等級(jí)產(chǎn)品的生產(chǎn),我們將同一個(gè)具體工廠所生產(chǎn)的位于不同等級(jí)的一組產(chǎn)品稱為一個(gè)產(chǎn)品族,右

圖所示的是海爾工廠和TCL工廠所生

成的電視機(jī)與空調(diào)對(duì)應(yīng)的關(guān)系圖:3.2

抽象工廠模式

(Abstract

Factory)

模式軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

學(xué)

網(wǎng)

:http://www.ryjiaoyu.com/book/details/8402海爾空調(diào)TCL空

調(diào)一個(gè)產(chǎn)品等級(jí)一個(gè)產(chǎn)品族產(chǎn)品等級(jí)海爾電視機(jī)TCL電

機(jī)產(chǎn)品族3.2

抽象工廠模式

(Abstract

Factory)

模式(續(xù))·

3.2.1模式的定義與特點(diǎn)定義:

是一種為訪問(wèn)類提供一個(gè)創(chuàng)建一組相關(guān)或相互依賴對(duì)象的接

口,且訪

問(wèn)類無(wú)需指定所要產(chǎn)品的具體類就能得到同族的不同等級(jí)的產(chǎn)品的模式結(jié)構(gòu)。使用抽象工廠模式一般要滿足以下條件:1)系統(tǒng)中有多個(gè)產(chǎn)品族,每個(gè)具體工廠創(chuàng)建同一族的但屬于不同等級(jí)結(jié)構(gòu)

的產(chǎn)品。2)系統(tǒng)一次只可能消費(fèi)其中某一族產(chǎn)品,即同族的產(chǎn)品一起使用。優(yōu)點(diǎn):

1)可以在類的內(nèi)部對(duì)產(chǎn)品族中相關(guān)聯(lián)的多等級(jí)產(chǎn)品共同管理,而不

專門引入多個(gè)新的類來(lái)進(jìn)行管理;2)當(dāng)增加一個(gè)新的產(chǎn)品族時(shí)不需要修改原

碼,滿足開閉原則。缺點(diǎn):當(dāng)產(chǎn)品族中需要增加一個(gè)新等級(jí)的產(chǎn)品時(shí),則所有的工廠類都需要進(jìn)

行修改。軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(www.ptpre

和)3.2抽象工廠模式

(AbstractFactory)

模式(續(xù))·3.2.2模式的結(jié)構(gòu)與實(shí)現(xiàn)1.模式的結(jié)構(gòu)抽象工廠模式的主要角色有:1)抽象工廠(Abstract

Factory):

提供了創(chuàng)建產(chǎn)品的接口,它包

含多個(gè)創(chuàng)建產(chǎn)品的方法newProduct(),

可以創(chuàng)建多個(gè)不同等級(jí)的產(chǎn)品。2)

具體工廠(Concrete

Factory):

主要是實(shí)現(xiàn)抽象工廠中的多個(gè)

抽象方法,完成具體產(chǎn)品的創(chuàng)建。3)

抽象產(chǎn)品(Product):

定義了產(chǎn)品的規(guī)范,描述了產(chǎn)品的主要

特性和功能,抽象工廠模式有多個(gè)抽象產(chǎn)品。4)

具體產(chǎn)品(Concrete

Product):

實(shí)現(xiàn)了抽象產(chǎn)品角色所定義的

接口,由具體工廠來(lái)創(chuàng)建,它同具體工廠之間是多對(duì)一的關(guān)系。軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱人民郵電出版社(

和)·

3.2.2模式的結(jié)構(gòu)與實(shí)現(xiàn)1.模式的結(jié)構(gòu)右邊是其結(jié)構(gòu)圖:2.模式的實(shí)現(xiàn)//該模式的實(shí)現(xiàn)

關(guān)鍵代碼見(jiàn)下一頁(yè):3.2

抽象工廠模式

(Abstract

Factory)

模式(續(xù))軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(www.ptpre

和)AbstractFactory+newProduct1():Product1+newProduct2():Product2ConcreteFactory1

ConcreteFactory2!《create》

lacreate》ConcreteProduct12+show()voidConcreteProduct11+show():voidConcreteProduct22+show():voidConcreteProduct21+show():void+newProduct1():Product1+newProduct2():Product2+newProduct1():Product1+newProduct2():Product2+

r

)c:

oidvt1ooshP+show():voidClient抽象工廠和具體工廠的代碼1)抽象工廠:提供了廠品的生成方法。interface

AbstractFactory{publicProduct1newProduct1();public

Product2

newProduct2();Java

面向?qū)ο蟪绦蛟O(shè)計(jì)(ISDN:9787564740634)、

作者:程細(xì)柱電子科技大學(xué)出版社(www.uestcp.com.cn)

37抽象工廠和具體工廠的代碼2)具體工廠:實(shí)現(xiàn)了廠品的生成方法。class

ConcreteFactory1

implementsAbstractFactory

{

public

Product1

newProduct1(){System.out.println("具體工廠1生成-->具體產(chǎn)品11...");

return

new

ConcreteProduct11();publicProduct2

newProduct2(){System.out.println("具體工廠1生成-->具體產(chǎn)品21...");

return

new

ConcreteProduct21();Java

面向?qū)ο蟪绦蛟O(shè)計(jì)(ISDN:9787564740634)、作者:程細(xì)柱電子科技大學(xué)出版社(www.uestcp.com.cn)

38抽象工廠

客戶Farm

FarmTest+newAnimal():Animal

+main(Stringn

args):void

+newPlant():Plant具體工廠SGfarm+newAnimal():Animal+newPlant():Plantcreatexcreator

《create》具體產(chǎn)品Vegetables+Vegetables)△抽象產(chǎn)品Animal+show():void·3.2.3模式的應(yīng)用實(shí)例【例3.2】

用抽象工廠模式設(shè)計(jì)農(nóng)場(chǎng)類。分析:農(nóng)場(chǎng)中除了像畜牧

場(chǎng)一樣可以養(yǎng)動(dòng)物,還可以

培養(yǎng)植物,如養(yǎng)馬、養(yǎng)牛、種菜、種水果等,所以本實(shí)

例比前面介紹的畜牧場(chǎng)類復(fù)

雜,必須用抽象工廠模式來(lái)

實(shí)現(xiàn),右邊是其結(jié)構(gòu)圖:注:程序代碼見(jiàn)附件3.2

抽象工廠模式

(Abstract

Factory)

模式(續(xù))軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(www.ptpress.com.cn

和www.ptpedu.com.cn)具體工廠

SRfarm+newAnimal():Animal

+newPlant():Plant《create》抽象產(chǎn)品Plant+show():void具體產(chǎn)品

Fruitage+Fruitage()具體產(chǎn)品

Cattle具體產(chǎn)品

Horse+Cattle()+Horse()擂包資源管理器×回config.xml

X3<?xml

version="1.0"encoding="UTF-8"?><config><className>SGfarm</className>Chapter02sre三JRE系統(tǒng)庫(kù)[JavaSE-1.6

Chapter03src安AbstractFactoryDFarmTestjavaDReadXMLjava◎

config.xml串Builder串FactoryMethod

A_Cattle.jpgA_Horse.jpgA_Pig.jpgP_FruitagejpgP_Vegetablesjpgw1TV1sf1.jpgw2TV2sf2jpg動(dòng)物:牛

回抽象工廠模式測(cè)試植物:蔬菜圈

|固控制臺(tái)×FarmTest(3)[Java應(yīng)用程序C:Program

FilesVavaljre6bin\javaw.exe(2017-4-4下午9:37:28)新典名:AbstractFactory.SGfarm新牛出生!就菜長(zhǎng)成!·3.2.3模式的應(yīng)用實(shí)例【例3.2】用抽象工廠模式設(shè)計(jì)農(nóng)場(chǎng)

。右邊是程序的

運(yùn)行結(jié)果3.2抽象工廠模式

(Abstract

Factory)

模式(續(xù))軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(和

www.ptped)3.2

抽象工廠模式

(Abstract

Factory)

模式(續(xù))·

3.2.4模式的應(yīng)用場(chǎng)景抽象工廠模式通常適用以下場(chǎng)景:1

)當(dāng)需要?jiǎng)?chuàng)建的對(duì)象是一系列相互關(guān)聯(lián)或相互依賴的產(chǎn)品族時(shí)

,

如:電器工廠中的電視機(jī)、洗衣機(jī)、空調(diào)等。2)系統(tǒng)中有多個(gè)產(chǎn)品族,但每次只使用其中的某一族產(chǎn)品。如:

有的粉絲只喜歡穿李寧牌的衣、褲和鞋。3)系統(tǒng)中提供了產(chǎn)品的類庫(kù),且所有產(chǎn)品的接口相同,客戶端不

依賴產(chǎn)品實(shí)例的創(chuàng)建細(xì)節(jié)和內(nèi)部結(jié)構(gòu)。軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(www.ptpre

和)3.2

抽象工廠模式

(Abstract

Factory)

模式(續(xù))·3.2.5模式的擴(kuò)展抽象工廠模式的擴(kuò)展有一定的“開閉原則”傾斜性:1)當(dāng)增加一個(gè)新的產(chǎn)品族時(shí)只需增加一個(gè)新的具體工廠,不需

要修改原代碼,滿足開閉原則。2)當(dāng)產(chǎn)品族中需要增加一個(gè)新種類的產(chǎn)品時(shí),則所有的工廠類

都需要進(jìn)行修改,不滿足開閉原則。另一方面,當(dāng)系統(tǒng)中只存在一個(gè)等級(jí)結(jié)構(gòu)的產(chǎn)品時(shí),抽象工廠模式將退化到工廠方法模式。軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(www.ptpre

和)3.3建造者

(Builder)

模式在軟件開發(fā)過(guò)程中有時(shí)需要?jiǎng)?chuàng)建一個(gè)復(fù)雜的對(duì)象,這個(gè)復(fù)雜對(duì)象通常由多個(gè)子部件按一定的步驟組合而成。如:電腦是由CPU、

主板、

內(nèi)存條、硬盤、顯卡、機(jī)箱、顯示器、鍵盤、鼠標(biāo)等部件組裝而成的,

采購(gòu)員不可能自己去組裝電腦,而是將電腦的配置要求告訴老板,老板指揮技術(shù)人員去組裝電腦,然后再交給要買電腦的采購(gòu)員。生活中

這樣的例子很多,它們都是由多個(gè)部件構(gòu)成的,各個(gè)部件可以靈活選

擇,但其創(chuàng)建步驟都大同小異。這類產(chǎn)品的創(chuàng)建無(wú)法用前面介紹的工

廠模式描述,只有建造者模式可以很好地描述該類產(chǎn)品的創(chuàng)建。軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(和

www.p)3.3建造者

(Builder)

模式(續(xù))·

3.3.1模式的定義與特點(diǎn)定義:指將一個(gè)復(fù)雜對(duì)象的構(gòu)造與它的表示分離,使同樣的構(gòu)建

過(guò)程可以創(chuàng)建不同的表示,這樣的設(shè)計(jì)模式被稱為建造者模式。它是

將一個(gè)復(fù)雜的對(duì)象分解為多個(gè)簡(jiǎn)單的對(duì)象,然后一步一步構(gòu)建而成。優(yōu)點(diǎn):1)各個(gè)具體的建造者相互獨(dú)立的,有利于系統(tǒng)的擴(kuò)展;2)客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié),便于控制細(xì)節(jié)風(fēng)

險(xiǎn)。缺點(diǎn):1)產(chǎn)品的組成部分必須相同,這限制了其使用范圍;2)如果產(chǎn)品的內(nèi)部變化復(fù)雜,該模式會(huì)增加很多的建造者

類。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱

人民郵電出版社(和

)3.3建造者

(Builder)

模式(續(xù))·3.3.2模式的結(jié)構(gòu)與實(shí)現(xiàn)1.模式的結(jié)構(gòu)建造者模式的主要角色有:1)

產(chǎn)品角色

(Product):

它是包含多個(gè)組成部件的復(fù)雜對(duì)象,

由具體建造者來(lái)創(chuàng)建其各個(gè)組成部件。2)

抽象建造者

(Builder)

:

是一個(gè)包含創(chuàng)建產(chǎn)品各個(gè)子部件的

抽象方法的接口,它通常還包含一個(gè)返回復(fù)雜產(chǎn)品的方法getResult()。3)

具體建造者

(ConcreteBuilder):

實(shí)現(xiàn)了Builder接口,完

成復(fù)雜產(chǎn)品的各個(gè)部件的具體創(chuàng)建方法。4)

指揮者

(Director)

:

它調(diào)用建造者對(duì)象中的部件構(gòu)造與裝

配方法完成復(fù)雜對(duì)象的創(chuàng)建,在指揮者中不涉及具體產(chǎn)品的信息。軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(和

)1.模式的結(jié)構(gòu)右邊是其結(jié)構(gòu)圖:2.模式的實(shí)現(xiàn)3.3建造者

(Builder)

模式(續(xù))//該模式的實(shí)現(xiàn)代碼

見(jiàn)下頁(yè)

:《產(chǎn)品》

Product-partA:String-partB:String-partc:String+setPartA(String+setPartB(String+setPartc(String軟件設(shè)計(jì)模式(Java

版)、作者:程細(xì)柱

人民郵電出版社(www.ptpress.com.cn

和www.ptpedu.com.cn)《抽象建造者》Builder#productProduct

+buildpartA():void+buildpartB():void+getResult():Product《指揮者》Director-builder:Builder+Director(Builderbuilder)+construct():Product·

3.3.2模式的結(jié)構(gòu)與實(shí)現(xiàn)《具體建造者》

ConcreteBuilder1+buildpartA():void+buildpartB():void+buildpartc():void《具體建造者》

ConcreteBuilder2+buildpartA():void+buildpartB():void+buildpartc():voidpartA):voidpartB):voidpartC):void+buildpartc():void+show():voidClient·

其相關(guān)類的的代碼如下:1)

產(chǎn)品角色:是包含多個(gè)組成部

件的復(fù)雜對(duì)象。class

Product{private

String

partA;private

String

partB;private

String

partC;public

void

setPartA(StringpartA){this.partA=partA;public

void

setPartB(String

partB){this.partB=partB;public

void

setPartC(String

partC){this.partC=partC;public

void

show(){/

/顯示產(chǎn)品的特性

}3.3建造者

(Builder)

模式(續(xù))軟件設(shè)計(jì)模式(Java版

)(ISDN:9787564740634)、

作者:程細(xì)柱3.3建造者

(Builder)

模式(續(xù))2)

抽象建造者:包含創(chuàng)建產(chǎn)品各個(gè)子部件的抽象方法。abstract

class

Builder{//創(chuàng)建產(chǎn)品對(duì)象protected

Product

product=new

Product();public

abstract

void

buildPartA();public

abstract

void

buildPartB();public

abstract

void

buildPartC();//返回產(chǎn)品對(duì)象public

Product

getResult(){return

product;軟件設(shè)計(jì)模式(Java版)(ISDN:9787564740634)

、

作者:程細(xì)柱3.3建造者

(Builder)

模式(續(xù))3)

具體建造者:實(shí)現(xiàn)了抽象建造者接口。public

class

ConcreteBuilder

extends

Builder{public

void

buildPartA(){product.setPartA("建造PartA");publicvoidbuildPartB(){product.setPartA("建造PartB");public

void

buildPartC(){product.setPartA("建造PartC");軟件設(shè)計(jì)模式(Java版

)(ISDN:9787564740634)、

作者:程細(xì)柱3.3建造者

(Builder)

模式(續(xù))4)

指揮者:調(diào)用建造者中的方法完成復(fù)雜對(duì)象的創(chuàng)建。class

Director{private

Builder

builder;public

Director(Builder

builder){this.builder=builder;public

Product

construct(){/

產(chǎn)品構(gòu)建與組裝方法builder.buildPartA();builder.buildPartB();builder.buildPartC();return

builder.getResult();軟件設(shè)計(jì)模式(Java版)(ISDN:9787564740634)

、

作者:程細(xì)柱3.3建造者

(Builder)

模式(續(xù))5)

客戶類public

class

Client{public

static

void

main(String[]args){Builder

builder=new

ConcreteBuilder();Director

director

=new

Director(builder);Product

product

=director.construct();product.show();軟件設(shè)計(jì)模式(Java版

)(ISDN:9787564740634)

、作者:程細(xì)柱客戶類ComputerBuilder-builder:Worker+ProjectManager(Workerbuilder)

+build():Computer產(chǎn)品類Computer-cpu

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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)論