日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

程序员们有福了:独立于GUI的Java应用框架 Reflex 诞生了!

發(fā)布時(shí)間:2025/3/21 java 77 豆豆
生活随笔 收集整理的這篇文章主要介紹了 程序员们有福了:独立于GUI的Java应用框架 Reflex 诞生了! 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

現(xiàn)在,大家用java開發(fā)最多、最火的應(yīng)用是基于什么GUI?Andorid!應(yīng)該沒(méi)有人不知道!那你知道還有Awt、Swing、Swt、JavaFx嗎?雖然它們主要是用于開發(fā)桌面應(yīng)用的,不過(guò)也不全對(duì),JavaFx也是可以導(dǎo)出為手機(jī)應(yīng)用的。Whatever,不管它們面向什么平臺(tái),它們都是基于Java的 GUI的工具包或者框架,隨著技術(shù)的發(fā)展,還會(huì)有越來(lái)越多的GUI工具會(huì)出現(xiàn),這是一定的。難道我們這些程序員們就這么苦逼,每次的技術(shù)更新,我們都需要重新從0開始么?答案是NO!就像我們?nèi)祟愐粯?#xff0c;雖然每個(gè)人都長(zhǎng)得不一樣,但是內(nèi)部有一樣的東西,使得我們可以思考、交流和行走。我們需要把GUI剝離,把那些永恒的東西進(jìn)行提煉,這就是Reflex框架的目的。所以我說(shuō)大家有福了,讓我們抓住永恒和核心的東西,以不變應(yīng)萬(wàn)變,這樣,不管GUI再怎么變,都是so easy!

Reflex的中文意思是反射,整個(gè)框架是按照反射弧模式創(chuàng)建。沒(méi)錯(cuò),就是我們初中生物課本上學(xué)過(guò)的反射弧。大家如果有興趣,可以去百度百科上溫故而知新。我現(xiàn)在先簡(jiǎn)單說(shuō)說(shuō)它的結(jié)構(gòu),盡量不要陷入太多理論。為了大家有個(gè)直觀認(rèn)識(shí),這篇文章主要還是以一個(gè)簡(jiǎn)單的Hello World 示例為主。

Reflex框架把一個(gè)應(yīng)用程序分為5個(gè)部分:視圖、感受器、業(yè)務(wù)中樞、數(shù)據(jù)模型、效應(yīng)器。業(yè)務(wù)中樞就相當(dāng)于業(yè)務(wù)層,數(shù)據(jù)模型就相當(dāng)于數(shù)據(jù)層。框架獨(dú)立于視圖,我們平時(shí)的主要工作就是:

  • 定義感受器來(lái)感知視圖的行為。
  • 感受器通知業(yè)務(wù)中樞,業(yè)務(wù)中樞改變數(shù)據(jù)模型或者協(xié)調(diào)各個(gè)業(yè)務(wù)中樞之間的關(guān)系。
  • 定義效應(yīng)器,綁定數(shù)據(jù)到指定視圖。
  • 從上面可知,只有感受器和效應(yīng)器才和視圖有關(guān)系,一個(gè)是監(jiān)控視圖行為、一個(gè)是為視圖提供數(shù)據(jù)。為了和視圖獨(dú)立,我們通過(guò)Annotation來(lái)指定視圖就行啦。

    廢話不再多說(shuō),以后有興趣,大家可以慢慢了解。簡(jiǎn)單粗暴,上圖先。

    ?

    這個(gè)例子很簡(jiǎn)單,在視圖上有兩個(gè)元素,一個(gè)是按鈕,一個(gè)是文本。操作是這樣的:點(diǎn)擊按鈕,在業(yè)務(wù)中樞里面有個(gè)記數(shù),每點(diǎn)一下,記數(shù)就增加1。文本顯示的就是”Hello World”加上業(yè)務(wù)中樞中的記數(shù)。如下圖:

    可以看到,點(diǎn)擊按鈕,文本顯示就自動(dòng)更新。監(jiān)控按鈕點(diǎn)擊的代碼是這樣:

    @Receptor public class BtReceptor {/*** 自動(dòng)注入業(yè)務(wù)中樞 ,通過(guò)接口訪問(wèn)業(yè)務(wù)中樞*/@Autowiredprivate IHelloCenter helloCenter;/*** 感受對(duì)象是 id為bt的視圖,行為刺激是: click 事件.* @param view*/@Recept(target="bt", stimulation="android.view.View$OnClickListener")private void onRemoveBtClicked(View view){helloCenter.changeCount();} }

    我們不需要手動(dòng)創(chuàng)建感受器對(duì)象,在感受器類上用@Receptor標(biāo)記,框架會(huì)在適當(dāng)?shù)臅r(shí)候自動(dòng)創(chuàng)建該對(duì)象。onRemoveBtClicked方法上,有一個(gè)Recept注解,它定義了監(jiān)聽的視圖和接口。視圖和接口目前都是用字符串的形式表示,目的是 為了通用。在不同的gui框架里,需要不同的匹配算法來(lái)匹配視圖。在android,這里的bt,就會(huì)自動(dòng)匹配R.id.bt 這個(gè)按鈕。至于接口,目前只支持寫全接口,有點(diǎn)繁瑣,是不是? 以后想辦法解決。給定行為接口后,這個(gè)被注解的方法就相當(dāng)于該接口的回調(diào)函數(shù)。在此例中,監(jiān)控到按鈕被點(diǎn)擊后,就調(diào)用業(yè)務(wù)中樞的changeCount方法。

    業(yè)務(wù)中樞因?yàn)?#64;Autowired的關(guān)系,在BtReceptor被實(shí)例化的時(shí)候,會(huì)自動(dòng)注入業(yè)務(wù)中樞對(duì)象。它的具體實(shí)現(xiàn)是這樣:

    @Center public class HelloCenter extends BindableAware implements IHelloCenter, Initializable {private int count = 0;@Overridepublic void changeCount() {count ++; invalidateBind("hello");}@Bindable(name="hello")@Overridepublic int getCount() {return count;}@Overridepublic void onInitialized() {} }

    功能上很簡(jiǎn)單,不多說(shuō),就是增加一個(gè)計(jì)數(shù)。需要說(shuō)明的數(shù)據(jù)綁定,業(yè)務(wù)中樞需要繼承BindableAware這個(gè)類,它有一個(gè)方法,invalidateBind。調(diào)用invalidateBind方法就可以通知外部,什么失效了。在此例中就是名為hello的數(shù)據(jù)綁定失效了,需要重新更新。而名為hello的數(shù)據(jù)綁定和getCount方法對(duì)應(yīng),也就是說(shuō)getCount方法過(guò)時(shí)了。

    比如效應(yīng)器的代碼就調(diào)用了getCount方法:

    @Effector public class TextEffector {/*** 自動(dòng)注入業(yè)務(wù)中樞 ,通過(guò)接口訪問(wèn)業(yè)務(wù)中樞*/@Autowiredprivate IHelloCenter helloCenter;/*** 效應(yīng)對(duì)象是 id為text的視圖,效應(yīng)方位是 text屬性.* @param view*/@Effect(target="text", site="text")public String getHelloText(){return "hello world " + helloCenter.getCount();} }

    此時(shí)框架會(huì)重新調(diào)用getHelloText方法,然后把結(jié)果賦予給R.id.text的視圖,這樣就完成了整個(gè)流程。例子程序完整代碼在這里

    其實(shí),代碼量不是很多,結(jié)構(gòu)還很清晰,是不是很簡(jiǎn)單?簡(jiǎn)單歸納一下,Reflex為大家做了以下這些事情:

  • 以Annotation的方式定義了和視圖交互的方法,同時(shí)獨(dú)立于視圖。
  • 把程序分為幾個(gè)部分,每個(gè)部分都有自己專門職責(zé),結(jié)構(gòu)清晰。
  • 自動(dòng)數(shù)據(jù)綁定
  • 業(yè)務(wù)對(duì)象自動(dòng)注入。
  • 好了,今天就簡(jiǎn)單說(shuō)到這,Reflex現(xiàn)在還只是個(gè)雛形,離真正實(shí)用還有很大的距離,但是我會(huì)改進(jìn)的。雖然這么說(shuō),但我個(gè)人力量有限,如果誰(shuí)有興趣一起進(jìn)步,項(xiàng)目在這里,在此萬(wàn)分感謝。

    轉(zhuǎn)載于:https://www.cnblogs.com/simplevita/p/4596340.html

    總結(jié)

    以上是生活随笔為你收集整理的程序员们有福了:独立于GUI的Java应用框架 Reflex 诞生了!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。