版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
軟件體系結(jié)構(gòu)風(fēng)格軟件框架設(shè)計(jì)的核心問題是:能否復(fù)用已經(jīng)成型的體系結(jié)構(gòu)方案不同系統(tǒng)的設(shè)計(jì)方案存在著許多共性問題,把這些共性部分抽取出來,就形成了具有代表性的和可廣泛接受的體系結(jié)構(gòu)風(fēng)格什么是軟件體系結(jié)構(gòu)風(fēng)格?軟件體系結(jié)構(gòu)風(fēng)格是描述某一特定應(yīng)用領(lǐng)域中系統(tǒng)組織方式的慣用模式。軟件體系結(jié)構(gòu)風(fēng)格的作用是什么?1.指導(dǎo)如何將各個(gè)模塊和子系統(tǒng)有效地組織成一個(gè)完整的系統(tǒng)。2.有關(guān)風(fēng)格的使用帶來了設(shè)計(jì)者的交流形式。關(guān)于設(shè)計(jì)元素的詞匯促進(jìn)了設(shè)計(jì)者理解和交流。3.使用風(fēng)格能夠使代碼的重用性得到提高。當(dāng)用不同的系統(tǒng)時(shí),基本的架構(gòu)代碼風(fēng)格不需要修改,它能夠用于不同的系統(tǒng)中。體系結(jié)構(gòu)風(fēng)格對(duì)于高質(zhì)量的軟件產(chǎn)品而言,首先要為其選擇合適的體系結(jié)構(gòu)風(fēng)格,這樣就能夠更好地重用已有的設(shè)計(jì)方案和實(shí)現(xiàn)方案體系結(jié)構(gòu)風(fēng)格最關(guān)鍵的四要素◎提供一個(gè)詞匯表◎定義一套配置規(guī)則◎定義一套語(yǔ)義解釋原則◎定義對(duì)基于這種風(fēng)格的系統(tǒng)所進(jìn)行的分析體系結(jié)構(gòu)的風(fēng)格有哪些?管道-過濾器風(fēng)格面向?qū)ο箫L(fēng)格事件驅(qū)動(dòng)風(fēng)格分層風(fēng)格數(shù)據(jù)共享風(fēng)格解釋器風(fēng)格反饋控制環(huán)風(fēng)格特點(diǎn):1.每個(gè)構(gòu)件都有輸入輸出,構(gòu)件完成對(duì)輸入數(shù)據(jù)的處理產(chǎn)生輸出。2.構(gòu)件之間相對(duì)獨(dú)立,相互之間無交互狀態(tài),非鄰近過濾器不共享任何信息。3.整個(gè)體系結(jié)構(gòu)的最終輸出與格構(gòu)件執(zhí)行的順序無關(guān)。詞匯:過濾器:構(gòu)件管道:連接管道-過濾器風(fēng)格優(yōu)點(diǎn)◎使得軟構(gòu)件具有良好的隱蔽性和高內(nèi)聚、低耦合的特點(diǎn);◎允許設(shè)計(jì)者將整個(gè)系統(tǒng)的輸入/輸出行為看成是多個(gè)過濾器的行為的簡(jiǎn)單合成;◎支持軟件重用。只要提供適合在兩個(gè)過濾器之間傳送的數(shù)據(jù),任何兩個(gè)過濾器都可被連接起來;◎系統(tǒng)維護(hù)和增強(qiáng)系統(tǒng)性能簡(jiǎn)單。新的過濾器可以添加到現(xiàn)有系統(tǒng)中來;舊的可以被改進(jìn)的過濾器替換掉;◎允許對(duì)一些如吞吐量、死鎖等屬性的分析;◎支持并行執(zhí)行。每個(gè)過濾器是作為一個(gè)單獨(dú)的任務(wù)完成,因此可與其它任務(wù)并行執(zhí)行。缺點(diǎn)◎通常導(dǎo)致進(jìn)程成為批處理的結(jié)構(gòu)。這是因?yàn)殡m然過濾器可增量式地處理數(shù)據(jù),但它們是獨(dú)立的,所以設(shè)計(jì)者必須將每個(gè)過濾器看成一個(gè)完整的從輸入到輸出的轉(zhuǎn)換?!虿贿m合處理交互的應(yīng)用。當(dāng)需要增量地顯示改變時(shí),這個(gè)問題尤為嚴(yán)重?!蛞?yàn)樵跀?shù)據(jù)傳輸上沒有通用的標(biāo)準(zhǔn),每個(gè)過濾器都增加了解析和合成數(shù)據(jù)的工作,這樣就導(dǎo)致了系統(tǒng)性能下降,并增加了編寫過濾器的復(fù)雜性。◎難以進(jìn)行錯(cuò)誤處理,管道/過濾器結(jié)構(gòu)的固有特性,決定了很難制定錯(cuò)誤處理的一般性策略實(shí)例:傳統(tǒng)的編譯器是管道/過濾器體系結(jié)構(gòu)風(fēng)格的一個(gè)實(shí)例這種風(fēng)格建立在數(shù)據(jù)抽象和面向?qū)ο蟮幕A(chǔ)上,數(shù)據(jù)的表示方法和它們的相應(yīng)操作封裝在一個(gè)抽象數(shù)據(jù)類型或?qū)ο笾?。特點(diǎn):1.對(duì)象是構(gòu)件。2.在對(duì)象和對(duì)象之間,通過函數(shù)調(diào)用和過程調(diào)用來進(jìn)行交互。面向?qū)ο箫L(fēng)格優(yōu)點(diǎn)◎一個(gè)對(duì)象對(duì)外界隱藏了自己的詳細(xì)信息,改變一個(gè)對(duì)象的表示,不會(huì)影響系統(tǒng)的其它部分◎繼承和封裝方法為對(duì)象復(fù)用提供了技術(shù)支持?!?qū)ο髮?shù)據(jù)和操作封裝在一起,提高了系統(tǒng)內(nèi)聚性,減小了模塊之間的耦合程度,使系統(tǒng)更容易分解為既相互作用又相互獨(dú)立的對(duì)象集合缺點(diǎn):◎如果一個(gè)對(duì)象要調(diào)用另一個(gè)對(duì)象,則必須知道它的標(biāo)識(shí)和名稱◎會(huì)產(chǎn)生連鎖反應(yīng),如果一個(gè)對(duì)象的標(biāo)識(shí)發(fā)生改變,那么必須修改所有顯式調(diào)用它的其它對(duì)象,并消除由此引發(fā)的副作用
構(gòu)件不直接調(diào)用一個(gè)過程,而是觸發(fā)或廣播一個(gè)或多個(gè)事件。系統(tǒng)中的其它構(gòu)件中的過程在一個(gè)或多個(gè)事件中注冊(cè),當(dāng)一個(gè)事件被觸發(fā),系統(tǒng)自動(dòng)調(diào)用在這個(gè)事件中注冊(cè)的所有過程,這樣,一個(gè)事件的觸發(fā)就導(dǎo)致了另一模塊中的過程的調(diào)用。特點(diǎn):1.構(gòu)件是模塊,模塊可以是過程也可以是事件的集合。2.連接件:往往是以過程之間的隱式調(diào)用(ImplicitInvocation)來實(shí)現(xiàn)的事件驅(qū)動(dòng)風(fēng)格例:觀察者模式
publicinterfaceSubject
{
publicvoidattach(Observerobserver);
publicvoiddetach(Observerobserver);
voidnotifyObservers();
}
publicclassConcreteSubjectimplementsSubject
{
publicvoidattach(Observerobserver)
{
observersVector.addElement(observer);
}
publicvoiddetach(Observerobserver)
{
observersVector.removeElement(observer);
}
publicvoidnotifyObservers()
{
Enumerationenumeration=observers();
while(enumeration.hasMoreElements())
{
((Observer)enumeration.nextElement()).update();
}
}
publicEnumerationobservers()
{
return((Vector)observersVector.clone()).elements();
}
privateVectorobserversVector=newjava.util.Vector();
}
publicinterfaceObserver
{
voidupdate();
}publicstaticvoidmain(Stringargs[]){ Subjects=newConcreteSubject(); s.attach(newObserver(){publicvoidupdate(){ System.out.println("ok"); } }); s.notifyer(); }優(yōu)點(diǎn):◎事件聲明者不需要知道哪些構(gòu)件會(huì)響應(yīng)事件,因此,不能確定構(gòu)件處理的先后順序,甚至不能確定事件會(huì)引發(fā)哪些過程調(diào)用◎提高了軟件復(fù)用能力,只要在系統(tǒng)事件中注冊(cè)構(gòu)件的過程,就可以將該構(gòu)件集成到系統(tǒng)中◎便于系統(tǒng)升級(jí),只要構(gòu)件名和事件中所注冊(cè)的過程名保持不變,原有構(gòu)件就可以被新構(gòu)件所替代缺點(diǎn):◎構(gòu)件放棄了對(duì)系統(tǒng)計(jì)算的控制。一個(gè)構(gòu)件觸發(fā)一個(gè)事件時(shí),不能確定其它構(gòu)件是否會(huì)響應(yīng)它。而且即使它知道事件注冊(cè)了哪些構(gòu)件的構(gòu)成,它也不能保證這些過程被調(diào)用的順序?!驍?shù)據(jù)交換的問題。有時(shí)數(shù)據(jù)可被一個(gè)事件傳遞,但另一些情況下,基于事件的系統(tǒng)必須依靠一個(gè)共享的倉(cāng)庫(kù)進(jìn)行交互。在這些情況下,全局性能和資源管理便成了問題實(shí)例:1.Debugger2.在用戶界面中分離數(shù)據(jù)和表示特點(diǎn):分層系統(tǒng)采用多個(gè)層次組織,每一層必須起兩個(gè)作用:(1)使用下層提供的功能。(2)為上層提供服務(wù)。分層風(fēng)格publicinterfaceStudentDAO(){ListselectAll(){}StudentSelect(intid){}voidupdate(Students){}voiddelete(intid){}voidadd(Students){}}publicclassStudentDAOImpl(){}publicclassStudentBusiness{ StudentDaodao; publicStudent(StudentDaodao){ this.dao=dao } publicliststudentChoice(Listids){ Listlist=newArrayList(); for(inti=0;i<ids.size();i++){ intid=list.get(i);Students=dao.select(id); list.add(s); } returnlist;}優(yōu)點(diǎn)◎支持基于抽象程度遞增的系統(tǒng)設(shè)計(jì),使設(shè)計(jì)者可以把一個(gè)復(fù)雜系統(tǒng)按遞增的步驟進(jìn)行分解;◎支持功能增強(qiáng),因?yàn)槊恳粚又炼嗪拖噜彽纳舷聦咏换ィ虼斯δ艿母淖冏疃嘤绊懴噜彽纳舷聦?;◎支持重用。只要提供的服?wù)接口定義不變,同一層的不同實(shí)現(xiàn)可以交換使用。這樣,就可以定義一組標(biāo)準(zhǔn)的接口,而允許各種不同的實(shí)現(xiàn)方法。缺點(diǎn):◎并不是每個(gè)系統(tǒng)都可以很容易地劃分為分層的模式,甚至即使一個(gè)系統(tǒng)的邏輯結(jié)構(gòu)是層次化的,出于對(duì)系統(tǒng)性能的考慮,系統(tǒng)設(shè)計(jì)師不得不把一些低級(jí)或高級(jí)的功能綜合起來;◎很難找到一個(gè)合適的、正確的層次抽象方法。實(shí)例:操作系統(tǒng)、數(shù)據(jù)庫(kù)系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議組數(shù)據(jù)共享風(fēng)格也稱為倉(cāng)庫(kù)風(fēng)格,有兩種不同類型的軟件元素:一種是中央數(shù)據(jù)單元,也稱為資源庫(kù),用于表示系統(tǒng)的當(dāng)前狀態(tài),另一種是相互依賴的構(gòu)件組,中央數(shù)據(jù)單元和構(gòu)件之間可以進(jìn)行信息交換,這是數(shù)據(jù)共享體系結(jié)構(gòu)的技術(shù)實(shí)現(xiàn)基礎(chǔ)數(shù)據(jù)共享體系結(jié)構(gòu)風(fēng)格根據(jù)所使用的控制策略不同,數(shù)據(jù)共享體系結(jié)構(gòu)可以分為兩種類型:一種是傳統(tǒng)的數(shù)據(jù)庫(kù),另一種是黑板如果由輸入流中的事件來驅(qū)動(dòng)系統(tǒng)進(jìn)行信息處理,把執(zhí)行結(jié)果存儲(chǔ)到中央數(shù)據(jù)單元中,則這個(gè)系統(tǒng)就是數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)如果由中央數(shù)據(jù)單元的當(dāng)前狀態(tài)來驅(qū)動(dòng)系統(tǒng)運(yùn)行,則這個(gè)系統(tǒng)就是黑板應(yīng)用系統(tǒng)一個(gè)典型的黑板型數(shù)據(jù)共享系統(tǒng)包括以下三個(gè)部分:知識(shí)源:知識(shí)源中包含獨(dú)立的、與應(yīng)用程序相關(guān)的知識(shí),知識(shí)源之間不直接進(jìn)行通訊,它們之間的交互只通過黑板來完成。黑板數(shù)據(jù)結(jié)構(gòu):黑板數(shù)據(jù)是按照與應(yīng)用程序相關(guān)的層次來組織的解決問題的數(shù)據(jù),知識(shí)源通過不斷地改變黑板數(shù)據(jù)來解決問題??刂疲嚎刂仆耆珊诎宓臓顟B(tài)驅(qū)動(dòng),黑板狀態(tài)的改變決定使用的特定知識(shí)。黑板模式對(duì)于無確定性求解策略的問題比較有用,在專家系統(tǒng)中,這種模式應(yīng)用的比較廣泛。例:?jiǎn)栴}:設(shè)字符轉(zhuǎn)換規(guī)則
A∧B→C A∧C→D B∧C→G B∧E→F D→E
已知:A,B
求:F一、綜合數(shù)據(jù)庫(kù)
{x},其中x為字符二、規(guī)則集
1,IFA∧BTHENC 2,IFA∧CTHEND 3,IFB∧CTHENG 4,IFB∧ETHENF 5,IFDTHENE三、控制策略 順序排隊(duì)四、初始條件
{A,B}五、結(jié)束條件
F∈{x}綜合數(shù)據(jù)庫(kù)可觸發(fā)規(guī)則被觸發(fā)規(guī)則A,B(1)(1)A,B,C(2)(3)(2)A,B,C,D(3)(5)(3)A,B,C,D,G(5)(5)A,B,C,D,G,E(4)(4)A,B,C,D,G,E,F(xiàn)1,IFA∧BTHENC 2,IFA∧CTHEND3,IFB∧CTHENG 4,IFB∧ETHENF5,IFDTHENE求解過程例:傳教士與野人問題(M-C問題)
問題:
N個(gè)傳教士,N個(gè)野人,一條船,可同時(shí)乘坐k個(gè)人,要求在任何時(shí)刻,在河的兩岸及船上,傳教士人數(shù)不能少于野人的人數(shù)。
問:如何過河。 以N=3,k=2為例求解。1.解決問題的多方法性:對(duì)于一個(gè)專家系統(tǒng),針對(duì)于要解決的問題,如果在其領(lǐng)域中沒有獨(dú)立的方法存在,而且對(duì)解空間的完全搜索也是不可行的,在黑板模式中可以用多種不同的算法來進(jìn)行試驗(yàn),并且也允許用不同的控制方法。2.具有可更改性和可維護(hù)性:因?yàn)樵诤诎迥J街忻總€(gè)知識(shí)源是獨(dú)立的,彼此之間的通信通過黑板來完成,所以這使整個(gè)系統(tǒng)更具有可更改性和可維護(hù)性。優(yōu)點(diǎn):3.有可重用的知識(shí)源:由于每個(gè)知識(shí)源在黑板系統(tǒng)中都是獨(dú)立的,如果知識(shí)源和所基于的黑板系統(tǒng)有理解相同的協(xié)議和數(shù)據(jù),我們就可以重用知識(shí)源。4.支持容錯(cuò)性和健壯性:在黑板模式中所有的結(jié)果都是假設(shè)的,并且只有那些被數(shù)據(jù)和其它假設(shè)強(qiáng)烈支持的才能夠生存。這對(duì)于噪聲數(shù)據(jù)和不確定的結(jié)論有很強(qiáng)的容錯(cuò)性。1.測(cè)試?yán)щy:由于黑板模式的系統(tǒng)有中央數(shù)據(jù)構(gòu)件來描述系統(tǒng)的體現(xiàn)系統(tǒng)的狀態(tài),所以系統(tǒng)的執(zhí)行沒有確定的順序,其結(jié)果的可再現(xiàn)性比較差,難于測(cè)試。2.不能保證有好的求解方案:一個(gè)黑板模式的系統(tǒng)所提供給我們的往往是所解決問題的一個(gè)百分比,而不是最佳的解決方案。3.效率低:黑板模式的系統(tǒng)在拒絕錯(cuò)誤假設(shè)的時(shí)候要承受多余的計(jì)算開銷,所以導(dǎo)致效率比較低。缺點(diǎn)4.開發(fā)成本高:絕大部分黑板模式的系統(tǒng)需要用幾年的時(shí)間來進(jìn)化,所以開發(fā)成本較高。5.缺少對(duì)并行機(jī)的支持:黑板模式要求黑板上的中心數(shù)據(jù)同步并發(fā)訪問,所以缺少對(duì)不并行機(jī)的支持。數(shù)據(jù)共享風(fēng)格實(shí)例:專家系統(tǒng)、語(yǔ)音識(shí)別等在開發(fā)具有人機(jī)界面的軟件系統(tǒng)時(shí),比較適合使用模型-視圖-控制器體系結(jié)構(gòu)在MVC結(jié)構(gòu)中,主要包括模型、視圖和控制器:模型,是應(yīng)用程序的核心,封裝了問題的核心數(shù)據(jù)、邏輯關(guān)系和計(jì)算功能,提供了處理問題的操作過程視圖,是模型的表示,提供了交互界面,為用戶顯示模型信息控制器,負(fù)責(zé)處理用戶與系統(tǒng)之間的交互,為用戶提供操作接口MVC體系結(jié)構(gòu)風(fēng)格MVC體系結(jié)構(gòu)具有以下優(yōu)點(diǎn):多個(gè)視圖與一個(gè)模型相對(duì)應(yīng),變化-傳播機(jī)制確保了所有相關(guān)視圖都能夠及時(shí)地獲取模型變化信息,從而使所有視圖和控制器同步,便于維護(hù)具有良好的移植性,由于模型獨(dú)立于視圖,因此,可以方便地實(shí)現(xiàn)不同部分的移植系統(tǒng)被分割為三個(gè)獨(dú)立的部分,當(dāng)功能發(fā)生變化時(shí),改變其中的一個(gè)部分就能夠滿足要求MVC體系結(jié)構(gòu)風(fēng)格也存在著一些問題:增加了系統(tǒng)設(shè)計(jì)和運(yùn)行復(fù)雜性視圖與控制器連接過于緊密,妨礙了二者的獨(dú)立重用視圖訪問模型的效率比較低packagemypack;importcom.opensymphony.xwork2.ActionSupport;publicclassUserActionextendsActionSupport{ privateStringusername; privateStringuserpass;
publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; } publicStringgetUserpass(){ returnuserpass; } publicvoidsetUserpass(Stringuserpass){ this.userpass=userpass; } @Override publicStringexecute()throwsException{ if("Mike".equals(username)&&"123".equals(userpass) ||"張三".equals(username)&&"abc".equals(userpass)) return"success"; else return"error"; }}<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""/dtds/struts-2.0.dtd"><struts><!--定義包管理配置的action繼承struts-default.xml中的配置
--> <packagename="actions"extends="struts-default"><!--定義Action(login.action)--> <actionname="login"class="mypack.UserAction"><!--定義轉(zhuǎn)發(fā)路徑對(duì)應(yīng)的字符串名
--> <resultname="success">/Success.jsp</result> <resultname="error">/Error.jsp</result> </action> </package></struts><!--過濾器類
--><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><!--過濾所有的url請(qǐng)求
--><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><%@pagelanguage="java"import="java.util.*"pageEncoding="utf-8"%><html>
<body><!--提交到action--> <formaction="login.action"method="post">
用戶名:<!--參數(shù)名和action中的屬性名一樣
--> <inputtype=textname=username> <br>
密
碼: <inputtype=passwordname=userpass> <br> <inputtype=submitname=submvalue="提交"> <inputtype=resetname=resetvalue="取消"> </form> </body></html>特征基于解釋器風(fēng)格的系統(tǒng)核心在于虛擬機(jī)。一個(gè)基于解釋器風(fēng)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年商場(chǎng)營(yíng)業(yè)員個(gè)人工作總結(jié)例文(五篇)
- 2024年大學(xué)輔導(dǎo)員個(gè)人工作計(jì)劃(二篇)
- 2024年商業(yè)門面房出租合同標(biāo)準(zhǔn)范文(二篇)
- 2024年學(xué)生會(huì)紀(jì)律部工作計(jì)劃例文(二篇)
- 【《淺談小學(xué)生讀寫能力的培養(yǎng)》7300字(論文)】
- 【《房地產(chǎn)上市公司盈利能力探究(論文)》15000字】
- 2024年單位物業(yè)工程部八月份工作計(jì)劃范例(二篇)
- 2024年固定勞動(dòng)合同參考范文(五篇)
- 2024年后勤工作計(jì)劃書(二篇)
- 2024年小學(xué)二年級(jí)班主任工作總結(jié)(三篇)
- 建設(shè)工程消防驗(yàn)收技術(shù)服務(wù)項(xiàng)目方案(技術(shù)標(biāo) )
- MOOC創(chuàng)新創(chuàng)業(yè)與管理基礎(chǔ)(東南大學(xué))
- 萊州市梁郭鎮(zhèn)大郎家金礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
- 人工成本對(duì)建筑工程造價(jià)影響因素分析
- XX醫(yī)院高警示藥品(高危藥品)目錄
- 拆除橋梁專項(xiàng)施工方案范本
- 新靂切割噴墨繪圖機(jī)說明書
- 抗美援朝精神(教案)小學(xué)生主題班會(huì)通用版
- 集團(tuán)公司五年戰(zhàn)略發(fā)展規(guī)劃
- 防造假管理程序文件
- 光的反射(課件)五年級(jí)科學(xué)上冊(cè)(蘇教版)
評(píng)論
0/150
提交評(píng)論