目前Document類的結(jié)構(gòu)已經(jīng)比較完善了,由于編輯Document涉及到界面,所以先把GUI寫出來。
用Java做界面一直是比較麻煩的事情,早期的AWT太慢,現(xiàn)在很少用了,Swing我沒用過,但速度也快不了多少,最后發(fā)現(xiàn)SWT是一個(gè)不錯(cuò)的本地庫(kù),速度夠快,而且效果和本地平臺(tái)一樣(因?yàn)槭钦{(diào)用的平臺(tái)相關(guān)API),不仔細(xì)看根本看不出是java做的。
不過,考慮到移植性,我決定把Frame分成平臺(tái)無關(guān)和相關(guān)兩層,這樣就有足夠的靈活性,將來可以用Swing或者其他GUI庫(kù)替換SWT,或者移植到linux上時(shí)只需改動(dòng)平臺(tái)相關(guān)的接口(比如Windows中的Font使用了LOGFONT結(jié)構(gòu),這個(gè)在linux中根本沒有),上層抽象GUI接口不用改,核心類jexi.core.*只和抽象GUI打交道,不用管底層GUI是怎么實(shí)現(xiàn)的。
為了抽象出GUI接口,定義了:
Color , Font , Graphics , Frame , View ,……
等抽象接口或抽象類,對(duì)應(yīng)的平臺(tái)相關(guān)的具體類分別是:
SWTColor , SWTFont , SWTGraphics , SWTFrame , SWTView ,……
為了讓上層客戶端只和抽象接口打交道,使用Abstract Factory + Singleton + Adapter等模式,如圖:
優(yōu)點(diǎn)是靈活性大大增強(qiáng),F(xiàn)actory不僅負(fù)責(zé)創(chuàng)建Product,還可以緩存以便提高效率(要知道像創(chuàng)建字體這些GUI操作是非常費(fèi)時(shí)間的),缺點(diǎn)是引入了更多的類。
比如Font:
由于抽象類FontFactory是一個(gè)Singleton,所以寫了一個(gè)硬編碼在里面:
private static FontFactory instance = new SWTFontFactory();
這是唯一有耦合的地方,不過如果用SwingFontFactory替換了SWTFontFactory,只需要改成:
private static FontFactory instance = new SwingFontFactory();
重新編譯即可。
一個(gè)基本的界面已經(jīng)可以運(yùn)行了,如下圖:
下一步是增加編輯功能,文件讀寫,測(cè)試,爭(zhēng)取下一周發(fā)布一個(gè) beta 版! :)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
