一、引子其實沒有什麼好的例子引入解譯器模式,因為它描述了如何構成一個簡單的語言解譯器,主要應用在使用物件導向語言開發編譯器中;在實際應用中,我們可能很少碰到去構造一個語言的文法的情況。雖然你幾乎用不到這個模式,但是看一看還是能受到一定的啟發的。二、定義與結構解譯器模式的定義如下:定義語言的文法,並且建立一個解譯器來解釋該語言中的句子。它屬於類的行為模式。這裡的語言意思是使用規定格式和文法的代碼。在GOF的書中指出:如果一種特定類型的問題發生的頻率足夠高,那麼可能就值得將該問題的各個執行個體表述為
假設這樣一種情況,我們的系統的介面使用javax.swing包構建,介面的基礎是BaseView,他是一個容器,當然他應當提供擷取控制項元素的功能,比如得到按鈕,下拉框,表格等,當然僅僅是一個容器而已,而我們的介面的元素全部部署在JPanel上。描述為:一個介面就是一個BaseView,他只包含一個JPanel,這個包含JPanel包含所有我們的Swing控制項,例如JButton,JLable等等。問題出現了:我們通常因為業務的需要完成一個介面的操作要自動跳轉到下一個介面,完成下一個介面又能跳
概述面向方面的程式設計(AOP)是一個激動人心的新規範,和已經有十幾年歷史的物件導向的程式設計(OOP)在軟體開發上有相同的作用。 AOP和OOP不是相互競爭的技術,實際上它們相輔相成的十分融洽。物件導向的程式設計對於建模常見的對象等級體系非常有用。 它的不足之處在於處理跨多個非關聯物件模型的常見情況;這時就有AOP的用武之地了。AOP允許你跨關聯,使用單獨的、彼此之間非常不同的物件模型。 它允許你層次化--而不是嵌入--函數,以便代碼更易讀、更便於維護。
一、AOP編程概覽物件導向編程技術進入軟體開發的主流對軟體的開發方式產生了極大的影響,開發人員可以用一組實體以及這些實體之間的關係將系統形象地表示出來,這使得他們能夠設計出規模更大、更複雜的系統,開發週期也比以前更短。OO開發的唯一問題是,它本質上是靜態,需求的細微變化就可能對開發進度造成重大影響。Aspect-Oriented
1 Java與資料庫應用,JDBCJava發明以來,在短短的幾年之間,迅速佔領了從案頭應用(J2SE)到伺服器(J2EE),再到小型裝置嵌入式系統(J2ME)的應用開發市場,其語言吸取了SmallTalk的一切皆對象的理念,擺脫了C++的曆史累贅,簡潔、自由的風格贏得了很多開發人員的喜愛。從JDK1.1開始,Java成為實用的語言,而不是被人觀望的新品秀;再經過JDK1.2的大量增強(尤其是Collection Framework),JDK1.3的虛擬機器效率提升(HotSpot),JDK1.4
作為異軍突起的新型語言,Java定義了一個標準的運行環境,使用者定義的類在其中得到執行。這些使用者自訂類的執行個體代表了真實環境中的資料,包括儲存在資料庫、檔案或某些大型交易處理系統中的資料,而小型系統通常也需要一種在本地負責控制資料存放區的機制。由於資料訪問技術在不同的資料來源類型中是不一樣的,因此對資料進行訪問成了給程式開發人員的一種挑戰,程式員需要對每一種類型的資料來源使用特定的編程介面(API),即必須至少知道兩種語言來基於這些資料來源開發業務應用:Java語言和由資料來源所決定的資料訪
對於一個能夠訪問原始碼的經驗豐富的Java開發人員來說,任何程式都可以被看作是博物館裡透明的模型。類似線程轉儲(dump)、方法調用跟蹤、斷點、切面(profiling)統計表等工具可以讓我們瞭解程式目前正在執行什麼操作、剛才做了什麼操作、未來將做什麼操作。但是在產品環境中情況就沒有那麼明顯了,這些工具一般是不能夠使用的,或最多隻能由受過訓練的開發人員使用。支援小組和終端使用者也需要知道在某個時刻應用程式正在執行什麼操作。為了填補這個空缺,我們已經發明了一些簡單的替代品,例如記錄檔(典型情況下用
在撰寫本文時,夏季即將結束,新的學年就要開始,Twitter 的伺服器上不 斷湧現出世界各地的網蟲和非網蟲們發布的更新。對於我們很多身在北美的人來 說,從海灘聚會到足球,從室外娛樂到室內項目,各種各樣的想法紛至遝來。為 了跟上這種形勢,是時候重訪 Scitter 這個用於訪問 Twitter 的 Scala 客戶 機庫了。如果 到目前為止 您一直緊隨 Scitter 的開發,就會知道,這個庫現在能夠 利用各種不同的 Twitter API 查看使用者的好友、追隨者和時間軸,以及其他內 容。但是,
摘要:本文介紹了在JAVA環境下如何?IDEA對稱式加密演算法。由於電子商務和電子政務的普及,安全加密技術在其中應用非常廣泛,對安全加密技術的要求也很高。目前在JAVA環境下實現IDEA加密具有很多的優勢,因為JAVA是基於物件導向的程式設計語言,並且由於它的平台無關效能被大量應用於Internet的開發。關鍵字:IDEA(Internation Data Encryption Algorithm) JCA JCE 密鑰 獨立性
socket是基於TCP和UDP協議的高層介面,定義了收發資料的格式。Java的TCP服務中使用的Socket是一 種流機制,即對於編程人員來說,處理socket只需要從Socket中擷取流,然後可以像處理本地流一樣來進 行資料的收發。例如:DataOutputStream outToClient =new DataOutputStream(socket.getOutputStream());BufferedReader inFromClient =new BufferedReader(new
Java
所有非byte類型的基本類型都可以通過String.valueOf() 方法來轉換為字串非基本類型的比較需要使用equals方法取得表單提交的參數值1: String name = request.getParameter('Name');取得表單提交的數組值1: String[] nameList = request.getParameterValues('ListName');向頁面傳遞參數1: request.setAttribute('var',value);Session操作1:
當單線程應用程式中的主線程拋出一個未捕獲的異常時,因為控制台中會打 印堆疊追蹤(也因為程式停止),所以您很可能注意到。但在多線程應用程式中 ,尤其是在作為伺服器運行並且不與控制台相連的應用程式中,線程死亡可能成 為不太令人信服的事件,這會導致局部系統失敗,從而產生混亂的應用程式行為 。在 Java theory and practice十月份的專欄文章 中,我們研究了線程池, 並研究了編寫得不正確的線程池會如何“泄漏”線程,直到最終丟失所有線程。
關於在 Java 語言中使用異常的大多數建議都認為,在確信異常可以被捕獲 的任何情況下,應該優先使用檢查型異常。語言設計(編譯器強制您在方法簽名 中列出可能被拋出的所有檢查型異常)以及早期關於樣式和用法的著作都支援該 建議。最近,幾位著名的作者已經開始認為非檢查型異常在優秀的 Java 類設計 中有著比以前所認為的更為重要的地位。在本文中,Brian Goetz 考察了關於使 用非檢查型異常的優缺點。與 C++ 類似,Java 語言也提供異常的拋出和捕獲。但是,與 C++ 不一樣的
ConcurrentHashMap 是 Doug Lea的 util.concurrent 包的一部分,它提供 比Hashtable 或者 synchronizedMap 更高程度的並發性。而且,對於大多數成 功的 get() 操作它會設法避免完全鎖定,其結果就是使得並發應用程式有著非 常好的輸送量。這個月,BrianGoetz 仔細分析了 ConcurrentHashMap的代碼, 並探討 Doug Lea 是如何在不損失安全執行緒的情況下取得這麼驕人成績的。在7月份的那期
問題的提出:假定我們的HTML 頁中有一些表單需要處理,並且我們需要初始化資料庫中的欄位,我們該怎麼辦?標準的解決辦法就是使用CGI指令碼或是使用Java Servlet等伺服器端程式,但是你有沒有想過,還可以編寫一個指令碼程式使你可以用JavaScript直接調用伺服器端Java程式進行任何計算的結果,就像下面代碼中列的那樣:<html>我們的表單<br><form><input type="text"
這個月,我著手撰寫一篇文章,分析一個寫得很糟糕的微評測。畢竟,我們 的程式員一直受效能困擾,我們也都想瞭解我們編寫、使用或批評的代碼的效能 特徵。當我偶然間寫到效能這個主題時,我經常得到這樣的電子郵件:“我寫的 這個程式顯示,動態 frosternation 要比靜態 blestification 快,與您上一 篇的觀點相反!”許多隨這類電子郵件而來的所謂“評測“程式,或者它們運行 的方式,明顯表現出他們對於 JVM
摘要雖然 Java 提供了幾種開啟映像的機制,但儲存映像並不是它的強項。這篇技巧將講述如何將映像儲存在 24 位位元影像檔案中。另外,Jean-Pierre 還提供了將影像檔寫入位元影像檔案所需的全部代碼。這篇技巧是 "在 Java 應用程式中載入位元影像檔案的逐步指南" 的補充,那篇技巧說明了在 Java 應用程式中載入位元影像檔案的過程。本月我再提供一篇教程,說明如何將映像儲存在 24 位位元影像檔案中,其中還包含將映像對象寫入位元影像檔案的代碼片斷。如果您在
現在很多JAVA書籍,在介紹SWING的事件模型時,為了使JAVA初學者容易理解和上手,通常是在主類(自己的JFrame子類或JPanel)中做所有事情:要麼由主類作為監聽器,在介面的方法中通過判定事件來源來決定具體做何事;要麼在主類中使用內隱類來實現監聽器,(因為內隱類可以方便的訪問主類中的成員變數)。而很多JAVA初學者在往後的編程中也採用這種模式(至少我以前是這樣的)。其實,這種做法雖然簡單,卻缺乏可讀性、可擴充性和可維護性。之前我看到了一篇關於這個問題的文章(來自於《JavaPro》),
譯註:本文來自straight_talking_java@yahoogroups.com討論群組,已經是一 年多前的文章。Alan Williamson是Java Developers Journal的編輯,下文來自 他在IBM的一個訊息來源。SWT和Swing的論爭我見過不少,Netbeans和Eclipse的 也同樣多。譯者翻譯此文並不是要激起什麼爭執,也不是支援哪一方(雖然我的 確是站在SWT一邊的),更不是要攻擊Amy。我最重要的理由是,這是一篇有趣的 文章。裡面有內幕、線人、公司政治、