平時代碼中用不到設計模式?Are you kidding me?

引子

平時我是個反應很是慢的人。有多慢呢?大概是兩年前有次團隊內部開會時,我聽到同窗說平時代碼中用不到設計模式,我當時沒有回答。兩年後我終於反應過來了:「Are you kidding me?我天天都在用!」java

 

應用場景

建造者模式

寫一個接口,入參是一大堆,什麼都有。這是長期積累下來的代碼,參數都提供給外部用了。只能作加法,不能作減法。這時候接口就這樣了,內部能不能好看點呢?mysql

能夠啊,重構,留殼摳瓤啊!sql

 

這一堆參數能夠封裝成一個有意義的類,再往下傳遞處理。這時候就用到了建造者模式,對參數進行封裝。構造一個靜態builder函數,將參數傳進去,返回是一個對象。數據庫

例子以下:編程

這是構造一個「人」的對象。builder函數建議放到「人」這個對象裏,由於這樣從領域上來講更合理更清晰。設計模式

@Data
@Accessors(chain = true)
public class Person {
    private String name;
    private int armCount=2;//胳膊數默認爲2
    private int legCount=2;//腿數默認爲2

    private Person(String name) {
        this.name = name;
    }

    public static Person builder(String name) {
        return new Person(name);
    }
}

適配器模式

你們如今用mysql都喜歡用mybatis-generator工具自動生成部分代碼。裏面的對象通常稱爲領域對象。在上層給用戶返回結果的時候通常不直接用。由於信息太多了。好比數據庫中固定結構的字段:建立時間、更新時間、是否爲邏輯刪除列這些,更好的一個方式是對外不可見。這時候就要對領域對象和傳輸層對象之間作一個轉換,這時候用到適配器模式。mybatis

 

下面是使用BeanUtils將對象之間作適配的例子:數據庫設計

  private static QuotaResponse toQuotaResponse(Quota quota) {
        QuotaResponse quotaResponse = new QuotaResponse();
        BeanUtils.copyProperties(quota, quotaResponse);
        return quotaResponse;
    }

觀察者模式

數據庫設計時經常使用的一種表結構設計方式是子母表。好比能夠爲「人」設計一張數據表。軍人、工程師、特工有各自不一樣的屬性,它們是「人」這張數據表的關聯子表。爲了展現時候的效率,將這些子母表展開,另外作一張展現表。函數

在寫一個定時任務時,若是掃描到「人」的狀態狀態更新了。好比「人」的胳膊數變了,這時候能夠通知這些展現表,狀態都更新了。工具

 

舉個例子:

由於九頭蛇在街頭橫行,見人就砍,出現了一些殘疾人。神盾局特工Fitz(菲茲)正在研製一種肢體再生技術,這個技術完成將會是包括人在內的全部動物的福音。所以,人類醫院和動物醫院都做爲觀察者都訂閱了Fitz的項目狀態。一旦完成,這些醫院都會獲得通知。

定義醫院做爲觀察者的通用接口

public interface Observer {
    void update(boolean isFinish);
}

Fitz開放了一個attach方法,任何單位均可以實現Observer接口後經過這個方法被加入通知列表,一旦完成,Fiz將通知全部觀察者:

public class Fitz {
    private List<Observer> observers = new ArrayList<Observer>();

    public void attach(Observer observer) {
        observers.add(observer);
    }

    public void finish() {
        notifyAllObservers();
    }

    public void notifyAllObservers() {
        for (Observer observer : observers) {
            observer.update(true);
        }
    }
}

總結

代入思考,技術提高的關鍵

 

推薦閱讀

「前任的50種死法」開發踩坑案例--慢就是錯

一個請求過來都通過了什麼?(2017年http版)

測測你是《花千骨》裏的誰-業務代碼裏經常使用的設計模式

 

關於做者

一線開發十二年,有日本東京和美國硅谷研發經驗。有百餘項技術發明專利,目前任美團點評技術專家。有本身的技術公衆號「編程一輩子」。若是您在閱讀文章時有什麼疑問或者發現文章的錯誤,歡迎在公衆號裏給我留言。

相關文章
相關標籤/搜索