原创 gRPC over HTTP2

文章來源:https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md 本文用於詳細描述gRPC承載HTTP2幀的實現。 Outline 以下是grpc請求和響應流中

原创 無題

爲什麼叫無題呢?因爲我懶得想名字。也是寫這篇文章的主要原因,因爲我最近太懶了! 回首過去這二十多年,這種熟悉的感覺出現了很多次。 從小學到初中,我過得充實而快樂,每天做的事無非是上下學,玩兒,看電視。初中關注點都在學習上,而且非常

原创 sql的case when和left join

總結一下昨天寫sql時新接觸到的知識點。 SELECT c.`name` AS '客戶姓名', c.customer_adderss AS '客戶地址', c.phone AS '客戶聯繫電話', c.serial AS '客

原创 初次接觸存儲過程

最近有個需求需要查數據庫中的數據,然後需要對一個結果集進行循環比對,使用sql語句已經無法滿足需求了,所以大概看了一下存儲過程的相關內容,這裏需要特別感謝這篇文章,基本是以它爲藍本完成的。 創建存儲過程的格式 create proce

原创 單例模式

GitHub代碼 場景描述:假設我們需要一個全局唯一的實例,比如線程池,緩存等。 初步解決:比如所有開發人員通過約定,或者全局變量來實現。 問題:將對象賦值給一個全局變量,但並不一定會立即使用它,從而佔用內存資源,造成資源的浪費。 更

原创 命令模式

GitHub代碼 場景描述:我們需要構建一個遙控器程序,它擁有幾個插槽,而這些插槽可以配置不同功能的api,並且擁有一個撤銷按鈕,可以撤銷上一次的操作。 第一構想:使用大段的if else做邏輯判斷,但是這是一種非常糟糕的設計。 在提

原创 裝飾者模式

GitHub代碼 場景描述:咖啡店的訂單系統,初始的類設計如下 現提供加入配料的服務,在原有的系統上進行擴展。 初次嘗試:直接爲每個組合創建一個類,帶來的問題就是類的數量過多,且毫無彈性可言。 再次嘗試:從基類Beverage下手

原创 工廠模式

GitHub代碼 場景描述:我們正在設計一個披薩店,因爲我們對披薩的操作有一套固有的流程,比如切割,裝盒等,但是我們有着非常多的披薩類型,風味不同,所以如何設計針對不同口味創建不同的披薩就成了整個程序的難點。 簡單工廠 爲了增加程序

原创 觀察者模式

GitHub代碼 場景描述:我們得到了一個類WeatherData,它可以從氣象站取得數據,現在需要我們實現measurementsChanged()方法,將數據更新到相應的佈告板上。 初次嘗試: public void measur

原创 適配器模式與外觀模式

適配器GitHub代碼 外觀GitHub代碼 適配器模式 場景描述:想象一下我們維護了一套老系統,並於一個廠商通過接口進行交互。但是最近廠商更新它們的代碼,並變更了接口格式,我們如何在不修改老系統代碼的基礎上,優雅的過渡呢? 提出方案

原创 代理模式

GitHub代碼 遠程代理 場景描述:我們想要一臺遠程監視器! 我們可能需要引入一點新概念了,比如遠程代理。 遠程代理就好比“遠程對象的本地代表”。何謂有“遠程對象”?這是一種對象,活在不同的Java虛擬機(JVM)堆中(更一般的說法

原创 策略模式

GitHub代碼 場景闡述:通過設計一個超類鴨子而讓子類繼承,提取出部分公共方法進行實現,但後續添加需求時,因爲設計上的問題導致無窮無盡的噩夢…… 事出有因:超類鴨子負責實現公共的呱呱叫(quack)方法,後續提出需求,想要爲鴨子加入

原创 迭代器與組合模式

GitHub代碼 迭代器模式 場景描述:我們目前正在吞併期,剛把一個煎餅店和一個餐廳兼併了。但是關於菜單的設計上好像遇到了寫麻煩,兩者採用的集合不同,一個用數組,一個用ArrayList。 嘗試:如果我們想要打印菜單,就需要分別對兩種

原创 複合模式

GitHub代碼 複合模式(Compound Pattern)就是一種由模式所構成的模式。最典型的例子就是MVC(Model-View-Controller)。 控制器把控制邏輯從視圖中分離,讓模型和視圖之間解耦。通過保持控制器和

原创 狀態模式

GitHub代碼 場景描述:我們想要寫一個糖果機,如下是它的狀態圖。 我們想到最直接的解決辦法就是,大段的if else塊 但是正如我們之前所說,if else塊一旦遇到需求變更等情況,不僅面臨着大量代碼的重寫等,還面臨着出現bu