本系列主要是對自己在閱讀《設計模式的藝術》和《java設計模式》兩本書中知識的分類總結。
在工作中,我們多多少少都會感受到設計模式給我的開發帶來的好處,以前一直是臨時抱佛腳,遇上不懂的了臨時搜索一下,沒有成為自己的知識體系中的一環。17年初,我立志改善這種情況,經過前輩推薦正在閱讀《設計模式的藝術》和《Java設計模式》。為了加強自己的認知,故寫出這系列的個人學習筆記。
因為這是第一篇所以需要先記錄一下設計模式的基礎知識。
設計模式并不是IT界獨有的東西,它起源于建筑學,應用于很多的學科。
GoF將設計模式引入軟件工程領域。
設計模式的目的是為了解決問題。我個人認為設計模式就是我們經常講的對于特定問題的最佳實踐。我認為對于缺乏經驗的人來說設計模式起引導作用(例如我)。而對于經驗豐富的人來說設計模式其實只是問題解決方案的一部分。
適配器其實在我們生活中很常見,最常見的就是電源適配器。將220V的電壓轉換為電器所使用的電壓。這種作用的部分就叫做適配器。
我們再回推回編程環境中。在我們開發的過程中最常見的一種情況就是數據庫保存的字段和對外接口所用的字段不同。其實這種情況在大多數編程語言中都已經有比較好的成熟的解決方式。但其實這也是一適配方式。
再回歸到我們的所要講的內容。適配器模式主要解決的就是兼容性問題。
先明確幾個概念幫助我們理解適配器的核心思想。
適配器類(用來包裝適配者)適配者類(被適配的類)目標抽象類(外部使用所需的接口)適配器模式的實現主要通過兩種方式: * 繼承自適配者類,實現目標抽象類的接口。 * 繼承自目標抽象類,并對適配者類進行引用。
在實際開發中我們第一種方式比較常見:
//Java實現public interface Book { String getName(); double getPRice();}class BookInfo { private String name = "設計模式的藝術"; private double price = 99.9; public String getName() { return name; } public double getPrice() { return price; }}class FirstBook extends BookInfo implements Book {}因為Java的單繼承特性,這種方式只能適配單個適配者。
像C++一樣的多繼承語言可以同時適配多個適配者。
在學習I/O的時候,有個叫做過濾器的概念,我覺得這個過濾器也是這個套路。
BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(new File(“a.txt”)))
java中使用了這種將類的引用傳給包裝類來進行多適配者的適配工作。
public class Main { public static void main(String[] args) { BookInfo bookInfo = new Book(); System.out.println(bookInfo.getName()); System.out.println(bookInfo.getPrice()); }}class BookName { private String name = "設計模式"; public String getName() { return name; }}class BookPrice { private double price = 99.9; public double getPrice() { return price; }}interface BookInfo { String getName(); double getPrice();}class Book implements BookInfo{ private BookName bookName; private BookPrice bookPrice; public Book(){ this.bookName = new BookName(); this.bookPrice = new BookPrice(); } @Override public String getName() { return bookName.getName(); } @Override public double getPrice() { return bookPrice.getPrice(); }}在使用的時候我們不希望把所有的方法都實現一遍。這時就需要缺省的配置。我們可以建立一個缺省適配器的類,對所需的接口進行部分或者全部的缺省實現。這樣我們在使用的時候就可以直接繼承這個缺省的實現,重載掉我們需要自定義的方法就可以了。
新聞熱點
疑難解答