開發思想

思想

策略思想

解決的問題:一類對象,不同對象有不同的處理

實現

頂級介面

  • 定義規範,面向介面編程

抽象策略

  • 定義一套模板,不同的交給不同的策略實現

具體策略

  • 枚舉 對象標識 –具體策略

  • 策略集合-對象標識

 

觀察者思想

解決的問題:當一個對象狀態發生改變時,所有依賴他的對象將得到通知並自動更新

常見場景:

  • spring事件

  • 消息隊列

  • 我們不用去關心依賴的對象,只用把自己的事情做好

實現:

  • 充分解耦

  • 可實現一對一和廣播

頂級事件介面

具體事件

頂級訂閱者介面

具體訂閱者

事件發布中心

 

上下文思想

解決的問題:當一個參數在需要四處傳遞,可設置上下文,從上下文中取

實現:

  • spring提供了一系列獲取容器對象的介面ApplicationContextAware….

上下文頂級介面,定義規範

具體上下文

  • 保證全局唯一

  • 並非容器

池化思想

執行緒池

  • 復用執行緒,減少系統資源的消耗

  • 便於管理執行緒

  • 快速的響應

合理的執行緒池:根據不同場景,情況去構建合適的執行緒池,保證效率和資源消耗

場景:流程發布,構建流程軌跡

實現

CAS鎖控制控制執行緒池唯一,只有一個執行緒能夠進行調度(提交任務)

private AtomicBoolean started = new AtomicBoolean(false);

private AtomicBoolean scheduler = new AtomicBoolean(false);

自定義阻塞隊列,存放任務

private BlockingQueue<ProcessDefinition> queue = new LinkedBlockingQueue<>(512);

單個執行緒循環處理,allowCoreThreadTimeOut回收執行緒節約資源

this.executor.allowCoreThreadTimeOut(true);


try {
           ProcessDefinition definition;
           while ((definition = queue.poll()) != null) {
               handler(definition);
          }
      } catch (Exception e) {
           e.printStackTrace();
      } finally {
           scheduler.compareAndSet(true, false);
           if (!queue.isEmpty()) {
               scheduler();
          }
      }

設計思想

並不是絕對的,靈活變通

  • 構建合理的類結構,便於擴展,理解

  • 提取公共方法實現復用

單一職責模式

一個類只做一個事情,可通過依賴建立聯繫

優點:職責分明,結構清晰,便於修改

前:

img

後:

img

開閉原則

實現不改變這個類的情況下進行擴展

實現:策略模式

前:

img

 

後:

img

里氏替換原則

通過繼承來進行擴展

依賴倒置原則

面向介面編程

 

合成復用原則

多用組合代替繼承

  • 一般來說,如果兩個類之間是”Has-A”關係,則使用組合/聚合;如果是”Is-A”關係,則使用繼承。

迪米特法則

中間類

介面隔離原則

介面隔離原則和單一職責都是為了提高類的內聚性、降低它們之間的耦合性,體現了封裝的思想,但兩者是不同的:

  • 單一職責原則注重的是職責,而介面隔離原則注重的是對介面依賴的隔離。

  • 單一職責原則主要是約束類,它針對的是程式中的實現和細節;介面隔離原則主要約束介面,主要針對抽象和程式整體框架的構建。

介面拆分

Tags: