Mybatis學習筆記六之設計模式

2021-10-10 09:18:01 字數 3074 閱讀 2216

一、設計模式

在軟體工程領域,設計模式是一套通用的可復用的解決方案,用來解決在軟體設計過程中產生的通用問題。它不是乙個可以直接轉換成源**的設計,只是一套在軟體系統設計過程中程式設計師應該遵循的最佳實踐準則。

mybatis原始碼中使用了大量的設計模式,通過觀察設計模式在原始碼中的應用,能夠更深入的理解設計模式。

結合前面原始碼的分析,我們這裡只介紹build構建者模式、工廠模式和**模式。

1,build構建者模式

builder構建者模式指:將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。它屬於建立類模式,一般來說,如果乙個物件的構建比較複雜,超出了建構函式所能包含的範圍,就可以使用工廠模式和build構建模式。相對於工廠模式會產出乙個完整的產品,build應用於更加複雜的物件的構建,甚至只會構建產品的乙個部分,直白來說,就是使用多個簡單的物件一步一步構建成乙個複雜的物件。

例子:使用構建者模式來生產computer。主要步驟:

(1)將需要構建的目標類分成多個部件(電腦可以分成主機、顯示器、鍵盤、音響等)。

(2)建立構建類

(3)依次建立部件

(4)將部件組裝成目標物件

目標物件computer(一般來說這裡面包含的也是物件,我們就全部以string型別例子來講)

public class computer
構建者computerbuilder

public class computerbuilder 

public void installmainunit(string mainunit)

public void installmouse(string mouse)

public void installkeyboard(string keyboard)

public computer build()

}

測試類

parser.parse()方法中是解析配置檔案中所有資訊並封裝到configuration中,從而構建出複雜configuration物件。

2,工廠模式

在mybatis中比如sqlsessionfactory使用的是工廠模式,該工廠沒有那麼複雜的邏輯,是乙個簡單工廠模式(靜態工廠方法模式),屬於建立型模式。在簡單工廠模式中,可以根據引數的不同返回不同類的例項。簡單工廠模式專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。

例子:生產電腦

假設有乙個電腦的代工生產商,它目前已經可以代工生產聯想電腦了,隨著業務的擴充套件,這個代工生產上還要生產惠普的電腦,我們就需要乙個單獨的類來專門生產電腦,這就用到了簡單工廠模式。

(1)建立抽象產品類

public abstract class computer
(2)建立具體產品類(它們都繼承了父類computer,並實現了了start()方法)

public class lenovocomputer extends computer 

}

public class hpcomputer extends computer 

}

(3)建立工廠類

接下來建立乙個工廠類,它提供乙個靜態方法createcomputer用來生產電腦。你只需要傳入你想生產電腦的品牌,它就會例項化相應品牌的電腦物件

我們可以看到,該factory的opensession()方法過載了好多個,支援傳入不同的引數來建立sqlsession物件。

3,**模式

**模式(proxy pattern):給某乙個物件提供乙個**,並由**物件控制對原物件的引用。**模式的英文叫proxy,它是一種物件結構型模式,**模式分為靜態**和動態**。我們這裡介紹動態**。

例子:建立乙個person介面,並建立乙個dosomething()方法:

public inte***ce person
建立乙個名為bob的person介面的實現類,並重寫dosomething()方法:

public class bob implements person 

}

建立jdk動態**類,並使其實現invocationhandler介面,擁有屬性目標物件

public class jdkdynamicproxy implements invocationhandler 

//獲取**物件

public object gettarget()

@override

public object invoke(object proxy, method method, object args) throws throwable

}

接下來編寫乙個測試類測試:

public class proxytest 

}

我們可以看到列印結果:

mybatis學習筆記三之mybatis外掛程式

一 外掛程式介紹 一般情況下,開源框架都會提供外掛程式或其他形式的擴充套件點,供開發者自行擴充套件。一是增加了框架的靈活性 二是開發者可以結合實際需求,對框架進行擴充套件。以mybatis為例,我們可基於mybatis外掛程式機制實現分頁 分表 監控等功能,在無形中增強功能。二 mybatis外掛程...

學習筆記之mybatis 二

的開發方法。需要傳入配置檔案中的標籤方法。很不方便。需要通過介面 的方法便可去除sql方法標籤 1.先建立乙個介面,實現的方法為所有想要實現的功能的方法 3.實現乙個繼承方法介面的類。以乙個查詢方法來實現 select from mb test where id 4.再實現類中的方法沒什麼不同 建立...

MyBatis之六 快取

所有的這些屬性都可以通過快取元素的屬性來修改。比如 這個更高階的配置建立了乙個fifo快取,並每隔60秒重新整理,存數結果物件或列表的512個引用,而且返回的物件被認為是唯讀的,因此在不同執行緒中的呼叫者之間修改它們會導致衝突。可用的收回策略有 1 lru 最近最少使用的 移除最長時間不被使用的物件...