基礎設計模式 04 複雜物件建立的建造器模式

2022-03-23 01:39:46 字數 2349 閱讀 2098

現在很多人都在用lombok,通過註解就可以簡化**,省略我們好多任務作。但是其中有兩個註解對於我們建立物件非常好用,乙個是@builder,乙個是@access;

主要是學習一下@builder這個註解所涉及到的設計模式;

1.mybatis獲取sqlsession

sqlsession sqlsession = new

sqlsessionfactorybuilder()

.build(

/test.xml

")))

.opensession();

2.封裝controller返回資訊

@data

public

class

resultobj

public

static

resultobj successobj(object obj)

public

static

resultobj successobj(object obj,string message)

public

static

resultobj failobj()

public

static

resultobj failobj(string message)

public

static

resultobj failobj(object result,string message)

}

2.1 什麼是構造器模式將乙個複雜物件的構建與它的表示分離,使得同樣的建造過程可以建造不同的表示;(一句話總結,就是建物件唄,不過物件裡面的引數比較多複雜)

2.2 建造器模式的uml圖

2.3 建造器模式的優點及不足

首先,我們一般建立物件的方法有兩種:1.構造器建立;2.通過屬性set方法建立;

構造器建立物件:

class  a 

a(string a)

a(string a,string b)

a(string a,string b,string c)

}

set方式建立物件

classb  

public

void

seta()

public

string geta()

}

分析一下上面兩種方式存在的問題:

1.構造器建立物件,多個屬性的話,必須嚴格按照順序注入;set方法不存在這種問題;

2.構造器建立物件,可讀性差,如果物件中有多個屬性賦值 ,必須清楚每個屬性引數位置;set方法不存在這種問題;

3.set方法建立物件,物件在使用過程中容易被錯修改; 

根據上面可知,當複雜物件建立時,構造器方法可讀性很差,且屬性傳參不方便,set方法建立物件在使用過程中可能出現誤操作的缺點;

建造器模式完美的解決了上面的兩種問題; 

通過建立builder介面,或者內建靜態成員類,來建立構造器;

public

class

nutritionfacts

public builder calorizes(int

calorizes)

public builder fat(int

fat)

public builder sodium(int

sodium)

public builder carbohydrate(int

carbohydrate)

//增加乙個建立物件的build

public

nutritionfacts build()

}public

nutritionfacts(builder builder)

}

上面說了lombok還提供了 @access註解,這個註解的原理比較簡單,就是將傳統的set方法變成靜態,返回當前物件; 

class a      

}

以上就是對構造器模式的簡單介紹。

基礎設計模式 04 複雜物件建立的建造器模式

此篇部落格,更換格式為markdown,請檢視 現在很多人都在用lombok,通過註解就可以簡化 省略我們好多任務作。但是其中有兩個註解對於我們建立物件非常好用,乙個是 builder,乙個是 access 主要是學習一下 builder這個註解所涉及到的設計模式 sqlsession sqlses...

SPRING的工程模式建立複雜物件

spring通過工廠來建立物件,而不是new方法,因為工廠能實現解耦,spring所有建立都是通過反射實現的,我們通過配置檔案向spring容器中註冊需要的類,這樣可以使我們的 更容易修改,可維護性更高 set注入簡化寫法 spring複雜物件的建立 比如 資料庫的connection 或者sqls...

js建立物件 設計模式

類的功能 本文就說說如何用js實現對類的封裝,實現上述功能,var person function name,age 如何你覺得ta不像類的話,那麼你可以這樣做 var person function name,age 有了上面的例子之後,我們在此基礎之上就可以進行我們的完善了。var person...