1. 程式人生 > 其它 >乘風破浪,遇見現代研發運維(DevOps)之騰訊藍鯨智雲,一套從騰訊自研自用到開放賦能的產品研發運營一體化平臺

乘風破浪,遇見現代研發運維(DevOps)之騰訊藍鯨智雲,一套從騰訊自研自用到開放賦能的產品研發運營一體化平臺

## 設計模式(最佳實踐)
- 目標: 程式碼複用, 可讀性, 可擴充套件性, 可靠性 ==> 高內聚, 低耦合
- 原則: 
    * 開閉原則: 對擴充套件開放(提供方), 對修改關閉(使用方)
    * 單一職責: 一個類只負責一項功能
    * 介面隔離: 客戶端依賴的介面應該是最小介面
    * 依賴倒轉: 即面向介面程式設計
    * 裡式替換: 繼承時子類儘量不要重寫父類的方法, 以便引用父類的地方可以透明的使用子類
    * 迪米特法則: 最少知道原則, 只與直接朋友通訊(成員變數,方法引數及返回值)
    * 合成複用原則: 儘量使用合成/聚合的方式, 而不是使用繼承
- 展現: UML類圖 - 模式 * 建立型 - 單例模式: 餓漢(Runtime), 懶漢(雙重檢查鎖), 靜態內部類, 列舉 - 原型模式: 克隆(淺/深), 序列化與反序列化(ObjectStream/JSON字串) - 工廠模式: 將例項化物件的程式碼提取出來, 放在一個類中統一管理和維護(Calendar) - 建造者模式: 將複雜物件的建造過程抽象出來,使用者指定物件的型別和內容就可以構建他們. xxxBuilder, 控制建立的過程 (StringBuilder) * 結構型 - 介面卡模式
* 類介面卡(繼承原類並實現目標介面) * 物件介面卡(持有原類並實現目標介面) * 介面介面卡(對所有介面進行空實現) > 示例: SpringMVC裡面的HandlerApater. 編寫一個介面我們最常用的@RequestMapping裡面一個方法對應一個url, 其實還有很多種, 比如Servlet介面(service方法), Controller介面(handleRequest方法), Spring5新加入的HandlerFunction介面(handle方法).
每一種都可以通過對應的介面卡轉換為統一的handle方法
- 橋接模式: 多個維度變化時使用組合關係替代繼承關係, 避免類爆炸 > 示例: 圖形形狀, 圖形顏色; 兩個獨立的類層次, 形狀和顏色之間的橋樑 > 示例: 訊息系統, 維度1: 即可/延遲, 維度2: 簡訊/郵件/微信 > 示例: 轉賬系統, 維度1: 網上/櫃檯/AMT, 維度2: 普通/銀卡/金卡 - 裝飾者模式: 持有你並增強你, 動態的將新功能附加到物件上 > 示例: IO流, BufferInputStream(FileInputStream) - 組合模式: 樹形結構的整體和部分具有一致性訪問 - 外觀模式: 門面模式(Facade), 提供訪問特定子系統功能的便捷方式 > 示例: 維護一個遺留的大型系統時, 可以為新系統開發一個Facade類, 提供簡單清晰的介面 - 享元模式: 運用共享技術有效的支援大量細粒度的物件; 內部狀態和外部狀態 > 示例1: 池技術. 比如資料庫連線池, String常量池 > 示例2: 圍棋的棋子(內部狀態: 黑色/白色, 外部狀態: 位置), 棋子物件只需要兩個例項即可 > 示例3: IntegerCache - 代理模式: 提供一個替身, 通過代理物件訪問目標物件, 便於增強額外的功能 * 靜態代理 * 動態代理(Jdk, Cglib) * 變體: 防火牆代理, 快取代理, 遠端代理 * 行為型 - 模板方法模式: 定義抽象操作(演算法)的骨架, 子類重寫方法實現 - 命令模式: 將動作的請求者 和 動作的執行者解耦出來 * 示例: 將軍(命令釋出者), 士兵(執行者), 命令(連線將軍和士兵) - 訪問者模式: 將資料結構與操作解耦, 在被訪問的類裡面新增一個對外提供訪問者的介面 * 示例: SQL語法解析器 - 迭代器模式: 提供一種遍歷集合元素的統一介面, 用一致的方法遍歷集合元素 - 觀察者模式: Subject註冊/移除/通知 (Observable) - 中介者模式: 用一箇中介物件來封裝一系列物件互動 * 示例: MVC裡面的C就是Model和View的中介者 - 備忘錄模式: 記錄一個物件的某種狀態, 當需要回退時可以從備忘錄中恢復 - 直譯器模式: 詞法分析器, 語法分析器都可以看做直譯器 * 原理類圖: Context, AbstractExpression (TermialExpression/NonTerminalException) - 狀態模式 - 策略模式 - 職責鏈模式 - 例項: 計算引擎 * 工廠模式: SqlEngineFactory, 最早設計直接new, 後來新增動態模型,靜態模型, 預處理功能, SQL引擎個數等, 為了簡化建立SqlEngine物件採用了工廠模式 * 裝飾者模式: MultiSqlEngine持有SqlEngine並增強多執行緒處理能力