本篇是講述以前學習設計模式的一個總結篇,其目的是爲了對這些設計模式的進行一個提煉總結,可以經過查看看此篇就能夠理解一些設計模式的核心思想。html
設計模式是一套被反覆使用的、多數人知曉的、通過分類編目的、代碼設計經驗的總結。java
使用設計模式是爲了重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。git
設計模式有23種類型。按照主要分類能夠分爲三大類:程序員
1、建立型模式github
這些設計模式提供了一種在建立對象的同時隱藏建立邏輯的方式,而不是使用 new運算符直接實例化對象。這使得程序在判斷針對某個給定實例須要建立哪些對象時更加靈活。算法
2、結構型模式sql
這些設計模式關注類和對象的組合。繼承的概念被用來組合接口和定義組合對象得到新功能的方式。數據庫
3、行爲型模式編程
這些設計模式特別關注對象之間的通訊。設計模式
設計模式的六大原則
設計模式之間的關係圖:
設計模式總概況:
設計模式相關文章:
核心就是保證一個系統中的某個類只有一個實例並且該實例易於外界訪問。
在程序中比較經常使用的是數據庫鏈接池、線程池、日誌對象等等。
單例模式的寫法主要有5種,分別是:
工廠模式主要有三種,簡單工廠模式、工廠方法模式和抽象工廠模式。可是通常的狀況下咱們主要用到的是工廠方法模式和抽象工廠模式。
其核心是定義一個建立對象的接口,讓其子類本身決定實例化哪個工廠類,工廠模式使其建立過程延遲到子類進行。
好比生活中的汽車製造,大名鼎鼎的hibernate框架在選擇數據庫方言這塊。
主要核心是提供一個建立一系列相關或相互依賴對象的接口,而無需指定它們具體的類。
好比生活中的服裝製造廠,能夠單獨製造衣服、褲子、襪子等等,也能夠生產一套服裝。
使用多個簡單的對象一步一步構建成一個複雜的對象。這種類型的設計模式屬於建立型模式,它提供了一種建立對象的最佳方式。 簡單的來講就是將一個複雜的東西抽離出來,對外提供一個簡單的調用,能夠在一樣的構建過程建立不一樣的表示。和工廠模式很類似,不過相比而言更加註重組件的裝配。
適用一些基本組件不便,可是組合常常變化的時候。好比超市促銷的大禮包。
Builder:指定一個抽象的接口,規定該產品所需實現部件的建立,並不涉及具體的對象部件的建立。
ConcreteBuilder:需實現Builder接口,而且針對不一樣的邏輯,進行不一樣方法的建立,最終提供該產品的實例。
Director:用來建立複雜對象的部分,對該部分進行完整的建立或者按照必定的規則進行建立。
Product:示被構造的複雜對象。
優勢:
缺點
用於建立重複的對象,同時又能保證性能。這種類型的設計模式屬於建立型模式,它提供了一種建立對象的最佳方式。核心是克隆。
優勢: 1.能夠提高性能;
缺點: 1.由於必須實現Cloneable 接口,因此用起來可能不太方便。
適配器模式是做爲兩個不兼容的接口之間的橋樑。這種類型的設計模式屬於結構型模式,它結合了兩個獨立接口的功能。簡單的來講就是經過某個接口將不兼容的兩個類進行兼容,俗稱轉換器。
適配器模式主要有兩種類型,一種是類適配器模式,主要經過繼承來實現適配器功能;一種是對象適配器模式,經過組合來實現適配器功能。
電器的電壓,經典的jdbc使用。
優勢:
提高了類的複用和靈活度。
缺點:
使用過多,系統會比較雜亂,難以把握。
橋接是用於把抽象化與實現化解耦,使得兩者能夠獨立變化。這種類型的設計模式屬於結構型模式,它經過提供抽象化和實現化之間的橋接結構,來實現兩者的解耦。經過一箇中間的橋樑對兩邊的東西進行關聯起來,可是關聯的二者之間又不相互影響。
一個類存在兩個獨立變化的維度,且這兩個維度都須要進行擴展。
優勢:
一、抽象和實現的分離,實現瞭解耦; 二、提高的擴展能力。
缺點:
會使系統看起復雜,對新手不友好,沒有必定的抽象進行設計能力難以理解。
外觀模式隱藏系統的複雜性,並向客戶端提供了一個客戶端能夠訪問系統的接口。它向現有的系統添加一個接口,來隱藏系統的複雜性。對外提供一個簡單接口,隱藏實現的邏輯。
系統中有多個複雜的模塊或者子系統的時候。
優勢:
下降了耦合,從某種方面來講也提高了安全性。
缺點:
不符合開閉原則,不易更改。
裝飾器模式容許向一個現有的對象添加新的功能,同時又不改變其結構。這種類型的設計模式屬於結構型模式,它是做爲現有的類的一個包裝。 把某個東西進行裝飾起來,讓它能夠提供一些額外的功能。
原型不變,動態增長一些功能的時候。
優勢:
裝飾類和被裝飾類能夠獨立發展,耦合度低,易於擴展,靈活方便。
缺點:
過多的對某個類進行裝飾,會增長複雜度。
組合模式是用於把一組類似的對象看成一個單一的對象。組合模式依據樹形結構來組合對象,用來表示部分以及總體層次。這種類型的設計模式屬於結構型模式,它建立了對象組的樹形結構。
能夠表示爲 ‘部分-總體’的層級結構。
優勢:
高層模塊調用較爲簡單,增長某個節點方便。
缺點:
由於其子節點的聲明都是實現類,而不是接口,違反了依賴倒置原則。
過濾器模式容許開發人員使用不一樣的標準來過濾一組對象,經過邏輯運算以解耦的方式把它們鏈接起來。這種類型的設計模式屬於結構型模式,它結合多個標準來得到單一標準。
須要進行篩選的時候。
優勢:
簡單,解耦,使用方便。
缺點:
過多使用須要注意性能。
在jdk1.8之後可使用steam的方法進行過濾分組,能夠根據指定的條件進行過濾分組篩選。
享元模式主要用於減小建立對象的數量,以減小內存佔用和提升性能。這種類型的設計模式屬於結構型模式,它提供了減小對象數量從而改善應用所需的對象結構的方式。
享元模式的角色主要分爲三大類,抽象享元類、具體享元類以及享元工廠類。
系統有大量類似對象。
優勢:
極大的減小對象的建立,從而下降了系統的內存,提高了效率。
缺點:
提升了系統的複雜度,由於須要將狀態進行分離成內部和外部,而且也使外部狀態固有化,使得隨着內部狀態的變化而變化,會形成系統的混亂。
須要注意劃分外部狀態和內部狀態,不然可能會引發線程安全問題。 這些類必須有一個工廠對象加以控制。
雖然它們在某些方面很像,可是實際上倒是不一樣的東西,單例模式的目的是限制建立多個對象,避免衝突,好比使用數據庫鏈接池。而享元模式享元模式的目的是共享,避免屢次建立耗費資源,好比使用String類。
主要是經過一個類表明另外一個類的功能。一般,咱們建立具備現有對象的對象,以便向外界提供功能接口。
代理模式主要由這三個角色組成,抽象角色、代理角色和真實角色。
代理模式又分爲靜態代理、動態代理。
java.lang.reflect
來進行開發。一、遠程代理。 二、虛擬代理。 三、Copy-on-Write 代理。 四、保護(Protect or Access)代理。 五、Cache代理。 六、防火牆(Firewall)代理。 七、同步化(Synchronization)代理。 八、智能引用(SmartReference)代理。
優勢:
一、職責清晰。 二、高擴展性。 三、智能化。
缺點:
一、因爲在客戶端和真實主題之間增長了代理對象,所以有些類型的代理模式可能會形成請求的處理速度變慢。 二、實現代理模式須要額外的工做,有些代理模式的實現很是複雜。
和適配器模式的區別:適配器模式主要改變所考慮對象的接口,而代理模式不能改變所代理類的接口。 和裝飾器模式的區別:裝飾器模式爲了加強功能,而代理模式是爲了加以控制。
責任鏈模式顧名思義,就是爲請求建立了一個接收者對象的鏈。這種模式給予請求的類型,對請求的發送者和接收者進行解耦。這種類型的設計模式屬於行爲型模式。在這種模式中,一般每一個接收者都包含對另外一個接收者的引用。若是一個對象不能處理該請求,那麼它會把相同的請求傳給下一個接收者,依此類推。 簡單的理解的話就是進行層級處理。
責任鏈模式主要由這三個角色組成,請求接收者接口(Handler)、請求實現者類(ConcreteHandler)和請求發送者(Client)。
須要動態指定處理某一組請求時,在不肯定接受者的的狀況下,向多個對象發送請求時。
優勢:
耦合度低,請求者和執行者並無必然的聯繫; 靈活度高,能夠經過內部成員來進行更改它們執行的次序; 擴展性好,Handler的子類擴展很是方便。
缺點:
會在某程度上下降程序的性能,設置不當的話可能會出現循環調用。 在鏈過長時,會下降代碼的閱讀性以及增長代碼的複雜度。
雖然責任鏈模式很靈活,可是犧牲的是必定的性能,由於責任鏈模式是層級處理,在處理數據的有必定的延遲,所因此須要低延遲的狀況下,不推薦使用責任鏈模式。
命令模式顧名思義,是一種數據驅動的設計模式,它屬於行爲型模式。請求以命令的形式包裹在對象中,並傳給調用對象。調用對象尋找能夠處理該命令的合適的對象,並把該命令傳給相應的對象,該對象執行命令。 也就是將一個請求封裝成一個對象,從而能夠用不一樣的請求對客戶進行參數化。
命令模式主要由這三個角色組成,命令對象(command)、命令執行對象(received)和命令請求對象(invoker)。
若是在有相似
命令
須要指定的,就能夠用命令模式,好比記錄日誌、撤銷操做命令等。
優勢:
耦合度低,請求者和執行者並無必然的聯繫; 擴展性好,Command的子類能夠很是容易地擴展。
缺點:
若是命令過多的話,會增長系統的複雜度 。
解釋器模式顧名思義,就是對某事物進行解釋。給定一個語言以後,解釋器模式能夠定義出其文法的一種表示,並同時提供一個解釋器。客戶端可使用這個解釋器來解釋這個語言中的句子。 解釋器模式其實就是對某事物進行解釋。
解釋器模式主要由這四個角色組成,抽象表達式(Expression)角色、終結符表達式(Terminal Expression)角色、非終結符表達式(Nonterminal Expression)角色和環境(Context)角色。
一個簡單的語法規則須要解釋的場景,好比sql。 有重複的問題的時候。
優勢:
擴展性好,子類擴展很是方便。 實現簡單。
缺點:
可以使用的場景比較少; 類過多的話,會使代碼臃腫,難以維護;
迭代器模式用於順序訪問集合對象的元素,不須要知道集合對象的底層表示,屬於行爲型模式。 它提供一種方法順序訪問一個聚合對象中各個元素, 而又無須暴露該對象的內部表示。
迭代器模式主要由這四個角色組成,迭代器角色(Iterator)、具體迭代器角色(Concrete Iterator)、容器角色(Container)和具體容器角色(Concrete Container)。
須要爲聚合對象提供遍歷的功能的時候。
優勢:
靈活度高,能夠經過不一樣的方式遍歷對象; 擴展性好,能夠很方便的增長新的聚合類和迭代器類而不用修改以前的代碼。
缺點:
因爲迭代器模式將存儲數據和遍歷數據的職責分離,增長新的聚合類須要對應增長新的迭代器類,類的個數成對增長,這在必定程度上增長了系統的複雜性。
訪問者模式(VisitorPattern),顧名思義使用了這個模式後就能夠在不修改已有程序結構的前提下,經過添加額外的訪問者來完成對已有代碼功能的提高,它屬於行爲模式。訪問者模式的目的是封裝一些施加於某種數據結構元素之上的操做。一旦這些操做須要修改的話,接受這個操做的數據結構則能夠保持不變。 其主要目的是將數據結構與數據操做分離。
訪問者模式主要由這五個角色組成,抽象訪問者(Visitor)、具體訪問者(ConcreteVisitor)、抽象節點(Node)、具體節點(ConcreteNode)和結構對象(ObjectStructure)。
對象結構中對象對應的類不多改變,但常常須要在此對象結構上定義新的操做; 須要對一個對象結構中的對象進行不少不一樣的而且不相關的操做,而須要避免讓這些操做"污染"這些對象的類,也不但願在增長新操做時修改這些類。
訪問者模式優勢:
擴展性好,能夠在不修改對象結構中的元素的狀況下,爲對象結構中的元素添加新的功能; 符合單一職責原則,經過訪問者將無關的行爲分離,使職責單一;
訪問者模式缺點:
違反了迪米特原則,由於具體元素對訪問者公佈細節; 違反了依賴倒置原則,依賴了具體類,沒有依賴抽象; 對象結構變化困難,若對象結構發生了改變,訪問者的接口和訪問者的實現也都要發生相應的改變;
中介者模式(Mediator Pattern),定義了一箇中介對象來封裝一系列對象之間的交互關係。中介者使各個對象之間不須要顯式地相互引用,從而使耦合性下降,並且能夠獨立地改變它們之間的交互行爲,屬於行爲型模式。 其主要的目的是用來下降多個對象和類之間的通訊複雜性。
中介者模式主要由這四個角色組成, 抽象中介者(Mediator)、具體中介者(ConcreteMediator)、 抽象同事類(Colleague)和具體同事類(ConcreteColleague) 。
經過一箇中間類來封裝多個類中的行爲,而又不想生成太多的子類。
優勢:
靈活性高,由於將同事類進行了解耦,使其沒必要有關聯性; 下降了類的複雜度,將一對多轉化成了一對一;
缺點:
中介者使用過多,會使系統變得複雜難以維護;
若不明確各個類的職責,那麼就不要進行使用!
和外觀模式、代理模式比較
中介者模式和外觀模式、代理模式比較相似,可是又有不一樣。 和外觀模式比較,中介者模式中,同事類必須依賴與中介者,中介者也知道同事類;可是外觀模式中,子系統是不須要知道外觀類的存在,而且子系統是能夠脫離外觀模式的。 和代理模式,代理模式的核心就是代理做用,主要仍是對原先的類進行擴展或增長控制,好比進行權限控制;而中介者模式主要目的是爲了減小對象以前的耦合,也就是同事類直接相互獨立,互不影響。
策略模式(Strategy Pattern)屬於對象的行爲模式。其用意是針對一組算法,將每個算法封裝到具備共同接口的獨立的類中,從而使得它們能夠相互替換。策略模式使得算法能夠在不影響到客戶端的狀況下發生變化。 其主要目的是經過定義類似的算法,替換if else 語句寫法,而且能夠隨時相互替換。
策略模式主要由這三個角色組成,環境角色(Context)、抽象策略角色(Strategy)和具體策略角色(ConcreteStrategy)。
若是在一個系統裏面有許多類,它們之間的區別僅在於它們的行爲,那麼使用策略模式能夠動態地讓一個對象在許多行爲中選擇一種行爲; 一個系統須要動態地在幾種算法中選擇一種; 若是一個對象有不少的行爲,若是不用恰當的模式,這些行爲就只好使用多重的條件選擇語句來實現;
優勢:
擴展性好,能夠在不修改對象結構的狀況下,爲新的算法進行添加新的類進行實現; 靈活性好,能夠對算法進行自由切換;
缺點:
使用策略類變多,會增長系統的複雜度。; 客戶端必須知道全部的策略類才能進行調用;
模板模式(Template Pattern)中,一個抽象類公開定義了執行它的方法的方式/模板。它的子類能夠按須要重寫方法實現,但調用將以抽象類中定義的方式進行。 這種類型的設計模式屬於行爲型模式。定義一個操做中的算法的骨架,而將一些步驟延遲到子類中。 模板模式,其主要的的思想就是作一個模板,提供給客戶端進行調用。
模板模式主要由抽象模板(Abstract Template)角色和具體模板(Concrete Template)角色組成。
抽象模板(Abstract Template): 定義了一個或多個抽象操做,以便讓子類實現。這些抽象操做叫作基本操做,它們是一個頂級邏輯的組成步驟;定義並實現了一個模板方法。這個模板方法通常是一個具體方法,它給出了一個頂級邏輯的骨架,而邏輯的組成步驟在相應的抽象操做中,推遲到子類實現。頂級邏輯也有可能調用一些具體方法。
具體模板(Concrete Template): 實現父類所定義的一個或多個抽象方法,它們是一個頂級邏輯的組成步驟;每個抽象模板角色均可以有任意多個具體模板角色與之對應,而每個具體模板角色均可以給出這些抽象方法(也就是頂級邏輯的組成步驟)的不一樣實現,從而使得頂級邏輯的實現各不相同。
有多個子類共有邏輯相同的方法; 重要的、複雜的方法,能夠考慮做爲模板方法。
優勢:
擴展性好,對不變的代碼進行封裝,對可變的進行擴展; 可維護性好,由於將公共代碼進行了提取,使用的時候直接調用便可;
缺點:
由於每個不一樣的實現都須要一個子類來實現,致使類的個數增長,會使系統變得複雜;
爲防止惡意操做,通常模板方法都加上 final 關鍵詞!
備忘錄模式(Memento Pattern)用於保存一個對象的某個狀態,以便在適當的時候恢復對象,該模式屬於行爲型模式。 其主要目的是在不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象以外保存這個狀態。 其主要的的思想就是備份。
備忘錄模式主要由這三個角色組成,備忘錄角色(Memento)、發起人角色(Originator)和負責人(Caretaker)角色。
須要保存/恢復數據的相關狀態場景;
優勢
給用戶提供了一種能夠恢復狀態的機制,可使用戶可以比較方便地回到某個歷史的狀態; 實現了信息的封裝,使得用戶不須要關心狀態的保存細節;
缺點
很是的消耗資源; 客戶端必須知道全部的策略類才能進行調用;
狀態模式(State Pattern)屬於行爲型模式,其狀態的對象和一個行爲隨着狀態對象改變而改變。 其主要目的解決的是當控制一個對象狀態轉換的條件表達式過於複雜是的狀況。把狀態的判斷邏輯轉移到表示不一樣狀態一系列類中,能夠把複雜的判斷簡單化。 主要的的思想就是提供一種狀態,提供給客戶端進行調用。
狀態模式主要由環境角色(Context)、 抽象狀態(State)和具體狀態(Concrete State)組成。
環境角色(Context): 它定義了客戶程序須要的接口並維護一個具體狀態角色的實例,將與狀態相關的操做委託給當前的具體狀態對象來處理。
抽象狀態角色(State): 定義一個接口以封裝使用上下文環境的的一個特定狀態相關的行爲。
具體狀態角色(Concrete State):實現抽象狀態定義的接口。
行爲隨狀態改變而改變的場景; 條件、分支語句的代替者。
優勢:
擴展性好,將和狀態有關的行爲放到一塊兒,增長新的的狀態,只須要改變對象狀態便可改變對象的行爲便可; 複用性好,讓多個環境對象共享一個狀態對象,從而減小系統中對象的個數;
缺點:
使用狀態模式會增長系統類和對象的個數,而且該模式的結構與實現都較爲複雜,若是使用不當將致使程序結構和代碼的混亂; 狀態模式對"開閉原則"的支持並不太好,對於能夠切換狀態的狀態模式,增長新的狀態類須要修改那些負責狀態轉換的源代碼,不然沒法切換到新增狀態,並且修改某個狀態類的行爲也需修改對應類的源代碼。
在行爲受狀態約束的時候使用狀態模式,並且狀態不超過5個。
和策略模式比較 在學習狀態模式的時候,很容易和策略模式搞混,由於它們實在是太像了,很難區分,在查閱一番資料以後,整理了以下的相同點和區別點。
相同點:
區別點
觀察者模式又叫發佈-訂閱(Publish/Subscribe)模式、模型-視圖(Model/View)模式、源-監聽器(Source/Listener)模式或從屬者(Dependents)模式。觀察者模式定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態上發生變化時,會通知全部觀察者對象,使它們可以自動更新本身。。 其主要目的是定義對象間的一種一對多的依賴關係,當一個對象的狀態發生改變時,全部依賴於它的對象都獲得通知並被自動更新。
觀察者模式主要由這四個角色組成,抽象主題角色(Subject)、具體主題角色(ConcreteSubject)、抽象觀察者角色(Observer)和具體觀察者角色(ConcreteObserver)。
須要關聯行爲的場景; 事件須要建立一個觸發鏈的場景,好比監控; 跨系統的消息交換場景,好比消息隊列、事件總線的處理機制。
優勢:
解除耦合,讓耦合的雙方都依賴於抽象,從而使得各自的變換都不會影響另外一邊的變換。
缺點
若是一個被觀察者對象有不少的直接和間接的觀察者的話,將全部的觀察者都通知到會花費不少時間; 若是在觀察者和觀察目標之間有循環依賴的話,觀察目標會觸發它們之間進行循環調用,可能致使系統崩潰; 觀察者模式沒有相應的機制讓觀察者知道所觀察的目標對象是怎麼發生變化的,而僅僅只是知道觀察目標發生了變化。
若是順序執行,某一觀察者錯誤會致使系統卡殼,建議採用異步方式。
空對象模式(NullObject Pattern)主要是經過一個空對象取代 NULL 對象實例的檢查。Null 對象不是檢查空值,而是反應一個不作任何動做的關係。 這樣的Null 對象也能夠在數據不可用的時候提供默認的行爲。 其主要目的是在進行調用是不返回Null,而是返回一個空對象,防止空指針異常。
須要大量對空值進行判斷的時候;
優勢:
能夠增強系統的穩固性,能有效防止空指針報錯對整個系統的影響; 不依賴客戶端即可以保證系統的穩定性;
缺點:
須要編寫較多的代碼來實現空值的判斷,從某種方面來講不划算;
在學習設計模式的時候,主要參考書籍是《大話設計模式》以及菜鳥教程的設計模式介紹。 其實在咱們學習了這麼多的設計模式中,大部分可能只是據說瞭解過,真正常用的設計模式也無外乎就那幾種,單例模式(數據庫、線程池場景)、工廠模式(簡單的crud操做中實例化的model)、策略模式(商城會員、優惠打折場景)、觀察者模式(消息推送場景)、代理模式(主要是動態代理這塊)、外觀模式(一鍵調用)、裝飾器模式(錦上添花場景),可是也不全這樣,使用設計模式最好根據實際的場景來使用,不然可能在不合適的場景使用了不適合的設計模式而致使代碼混亂。
往期音樂推薦
1、
咱們目送 那漸漸消失的行跡雲 在晃眼間消逝 老是如此短暫 如像昨天起 不變的事 始終不會改變 不應存在的東西 帶着遺憾消失在指間 那鳥兒還未能展翅高飛 但它總有一天會破風馳行 高不可攀的地方仍在遠處 因此只能凝視深藏的願望 孩子們走在盛夏的鐵路上 流風輕撫着他們的赤腳 遠離了童年
2、
這世上大部分失落,都是由於咱們本身沒成爲更好的本身,卻奢求別人成爲更好的別人。
3、
平靜孤寂的調子起頭,兩我的分開以後的沉寂 頹廢,慢慢的音階起伏,我意識到不能這樣下去,我開始改變現狀,變得積極。到高潮部分 我不在頹廢,我走了新的目標 我迎着太陽前進。我想這就是You的含義,你是個人一段過去
4、
扶桑畫師淺溪,居泰安,喜繪鯉。院前一方荷塘,錦鯉遊曳,溪常與嬉戲。 其時正武德之亂,藩鎮割據,戰事頻仍,魑魅魍魎,肆逆於道。兵戈逼泰安,街鄰皆逃亡,獨溪不捨錦鯉,未去。 是夜,院室倏火。有人入火護溪,言其本鯉中妖,欲取溪命,卻生情愫,遂不忍爲之。翌日天明,火勢漸歇,人已不見。
5、
稚兒擎瓜柳棚下,細犬逐蝶窄巷中,人間繁華多笑語,唯我空餘兩鬢風。
6、
散落的花,火的碎片 誘人的夏夜終結 漸漸 天空閃耀,帶着誰許的願 忽然綻開的煙花 美麗如夢幻,遲來脆弱的夏天 夜空中,火花舞動在今夜 枝頭落下的仲夏夜之夢 愉快的涼風,熱帶的夜 天空飄着細雨,在喧鬧的蟬鳴時節 夏末,秋天指向路邊。
7、
論如何一我的在家嗨成狗。取下耳機無限的孤獨感。帶上耳機臥槽我是全世界。
8、
我渴望能見你一面,但請你記得,我不會開口要求見你。這不是由於驕傲,你知道我在你面前毫無驕傲可言,而是由於,惟有你也想見個人時候,咱們見面纔有意義。 ———《越洋情書》
9、
就算是Believe,中間也藏了一個lie; 就算是Friend,仍是免不了end; 就算是Lover,還可能會over; 就算是Wife,內心也夾雜着if; 欣慰的是:即使是Forget,也曾經get, 就算impossible,但還藏着possible。
10、
人有三樣東西是沒法隱瞞的,咳嗽、窮困和愛;你想隱瞞越此地無銀三百兩。人有三樣東西是不應揮霍的,身體、金錢和愛;你想揮霍卻得不償失。人有三樣東西是沒法挽留的,時間、生命和愛;你想挽留卻漸行漸遠。人有三樣東西是不應回憶的,災難、死亡和愛;你想回憶卻苦不堪言。 ——《洛麗塔》
11、
簡單,重複,毫無華麗旋律,也無厚重悲涼的伴奏。但心恰恰就被牢牢的抓住了。一種茫然卻被迫緊湊的感受。一種不知何所處的心虛。what for?
12、
輕吟一句情話,執筆一副情畫。 綻開一地情花,覆蓋一片青瓦。 共飲一杯清茶,同研一碗青砂。 挽起一面輕紗,看清天邊月牙。愛像水墨青花,何懼剎那芳華。
十3、
全部人和事,本身心安理得就好,不是你的也彆強求,反正離去的,都是風景,留下的,纔是人生。
以上評論來自網易雲!
java-study 是本人在學習Java過程當中記錄的一些代碼,也包括以前博文中使用的代碼。若是感受不錯,但願順手給個start,固然若是有不足,也但願提出。 github地址: github.com/xuwujing/ja…
原創不易,若是感受不錯,但願給個推薦!您的支持是我寫做的最大動力! 版權聲明: 做者:虛無境
博客園出處:www.cnblogs.com/xuwujing CSDN出處:blog.csdn.net/qazwsxpcm 我的博客出處:www.panchengming.com