|
來看Buffer組。 Buffer BlockingBuffer BoundedFifoBuffer PriorityBuffer UnboundedFifoBuffer BufferUtils Buffer是定義在org.apache.commons.collections包下面的接口,用于表示按一定順序除去成員對象的collection如隊列等。具體的實現(xiàn)類在org.apache.commons.collections.buffer包下可以找到。 BufferUtils提供很多靜態(tài)/工具方法裝飾現(xiàn)有的Buffer實例,如將其裝飾成BlockingBuffer、執(zhí)行類型檢查的TypedBuffer、或者不可改變的UnmodifiableBuffer等等。 最簡單直接的Buffer實現(xiàn)類是UnboundedFifoBuffer,提供先進(jìn)先出的大小可變的隊列。而BoundedFifoBuffer則是對其大小進(jìn)行了限制,是固定大小的先進(jìn)先出隊列。BlockingBuffer要在多線程的環(huán)境中才能體現(xiàn)出它的價值,尤其是當(dāng)我們需要實現(xiàn)某種流水線時這個BlockingBuffer很有用:每個流水線上的組件從上游的BlockingBuffer獲取數(shù)據(jù),處理后放到下一個BlockingBuffer中依次傳遞。BlockingBuffer的核心特色通俗點說就是如果你向它要東西,而它暫時還沒有的話,你可以一直等待直至拿到為止。PriorityBuffer則提供比一般的先進(jìn)先出Buffer更強(qiáng)的控制力:我們可以自定義Comparator給它,告訴它怎么判定它的成員的先后順序,優(yōu)先級最高的最先走。 為了方便和清晰的需要,我在這里只舉一個BoundedFifoBuffer,包裝成TypedBuffer,看看在具體的代碼中通常如何使用Buffer:(還是沿用上次的Book類) package sean.study.commons.collections; import java.util.Iterator; import org.apache.commons.collections.Buffer; import org.apache.commons.collections.BufferUtils; import org.apache.commons.collections.buffer.BoundedFifoBuffer; import org.apache.commons.lang.StringUtils; public class BufferUsage { public static void main(String[] args) { demoBufferUsage(); } public static void demoBufferUsage() { System.out.println(StringUtils.center(" demoBagUsage ", 40, "=")); // data setup Book book1 = new Book("Refactoring Workbook", "7-5083-2208-8", 29.8); Book book2 = new Book("J2EE Design Patterns", "7-5083-3099-4", 45); Book book3 = new Book("Agile Software Development", "7-5083-1503-0", 59); Book book4 = new Book("Professional JSP", "7-5053-8005-2", 100); // create a Buffer Buffer buffer = BufferUtils.typedBuffer(new BoundedFifoBuffer(3), Book.class); buffer.add(book1); buffer.add(book2); buffer.add(book3); Book removed = (Book) buffer.remove(); System.out.println("Removed:"); System.out.println(removed); buffer.add(book4); // get items in buffer for (int i = 0; i < 3; i++) { System.out.println(buffer.get()); buffer.remove(); } System.out.println(StringUtils.repeat("=", 40)); } } 以下是運(yùn)行結(jié)果: ============= demoBagUsage ============= Removed: sean.study.commons.collections.Book@e09713[ name=Refactoring Workbook ISBN=7-5083-2208-8 retailPrice=29.8 ] Remaining: sean.study.commons.collections.Book@e09713[ name=J2EE Design Patterns ISBN=7-5083-3099-4 retailPrice=45.0 ] sean.study.commons.collections.Book@47b480[ name=Agile Software Development ISBN=7-5083-1503-0 retailPrice=59.0 ] sean.study.commons.collections.Book@19b49e6[ name=Professional JSP ISBN=7-5053-8005-2 retailPrice=100.0 ] ======================================== |
|
|