設計模式之建造模式

2021-09-10 02:49:48 字數 3627 閱讀 2462

建造模式是物件的建立模式。建造模式可以將產品的內部表象與產品的生成過程分割開來,從而可以使乙個建造過程生成具有不同的內部表象的產品物件。

上古時期女媧造人,首先要新建乙個人的類,但是女媧不只可以造人,它可以創造萬物,所以,這裡定義乙個標識介面叫product(產品)

public

inte***ce

product

public

class

manimplements

product

public

void

setsoul

(string soul)

public string getearsandeyes()

public

void

setearsandeyes

(string earsandeyes)

public string getarm()

public

void

setarm

(string arm)

}

那麼想要造人需要有一定的標準和步驟,這裡定義乙個介面來規範創造的步驟(抽象的建造者):

public

inte***ce

builder

創造人的步驟是buildpart1》buildpart2》buildpart3,最後的方法是返回創造的這個人

具體的建造者

public

class

manbuilder

implements

builder

@override

public

void

buildpart2()

@override

public

void

buildpart3()

@override

public man productresult()

}

在創造人的過程中,冥冥之中有乙個指揮者,指揮者委託女媧造人

public

class

director

}

測試**

director director =

newdirector()

;//客戶端只需要跟指揮者打交道

man man =director.

makeman

(new

manbuilder()

);system.out.

println

(man.

getarm()

);system.out.

println

(man.

getearsandeyes()

);system.out.

println

(man.

getsoul()

);

上邊例子中只有乙個產品類,對應的也只有乙個具體的建造者類。如果有兩個產品的話,就應當有兩個具體的建造者類,女媧造人之後感覺人類很孤單,決定造點動物玩玩:

public

class

dogimplements

product

public

void

setleg

(string leg)

public string gethead()

public

void

sethead

(string head)

}

dog的具體建造者:

public

class

dogbuilder

implements

builder

@override

public

void

buildpart2()

@override

public

void

buildpart3()

@override

public dog productresult()

}

指揮者類相應的增加乙個方法(makedog):

public

class

director

public dog makedog

(builder builder)

}

測試:

director director =

newdirector()

; man man =director.

makeman

(new

manbuilder()

);dog dog =director.

makedog

(new

dogbuilder()

);system.out.

println

(man.

getarm()

);system.out.

println

(man.

getearsandeyes()

);system.out.

println

(man.

getsoul()

);system.out.

println

("**********====");

system.out.

println

(dog.

gethead()

);system.out.

println

(dog.

getleg()

);

本模式涉及到四個角色:

建造模式在實現時可以根據具體情況做一些變化。

首先,如果設計師確定只需要乙個具體建造者角色的話,可以省略掉抽象建造者角色,因為如果只有乙個具體建造者,就不需要什麼規範了;抽象建造者被省略掉了,還可以在省略掉指揮者:

public

class

manbuilder

public

void

buildpart2()

public

void

buildpart3()

public man productresult()

//建造產品的方法

public man makeproduct()

}

準備乙個抽象類,將部分邏輯以具體方法以及具體構造子的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。這就是模板方法模式。

有意思的是,這個特殊的建造模式與模板方法有相似之處,makeproduct就是乙個模板方法,模板方法裡邊包含的就是基本方法。

如果系統的要求發生變化、要求有不同的零件生成邏輯時,那麼有兩種選擇:一是修改這個退化的建造模式,將它改回成為完全的建造模式;二是不修改已有**,將這個manbuilder擴充套件到不同的子類,在這些子類裡面置換掉需要改變的建造方法。

第一種選擇了建造模式;第二種選擇了模板方法模式。

建立型設計模式 建造模式

program ade someproblem author cade franklin create 2019 12 22 22 20 public inte ce housebuilder 別墅 program ade someproblem author cade franklin creat...

設計模式 4 建立型之建造模式

1 概念 builder模式也叫建造者模式或者生成器模式,是由gof提出的23種設計模式中的一種。builder模式是一種物件建立型模式之一,用來隱藏復合物件的建立過程,它把復合物件的建立過程加以抽象,通過子類繼承和過載的方式,動態地建立具有復合屬性的物件。builder模式是為物件的建立而設計的模...

十 建造模式

建造者模式用於建立一些複雜物件,這些物件內部構件間的建造順序通常是穩定的,但物件內部的構建通常面臨 著複雜的變化。摘自 大話設計模式 基本結構如下 產品,想要建立的複雜物件 抽象建造者 各個構件的抽象建造方法 得到產品的抽象方法 指揮者,指揮建造者 封裝建造順序的方法 產品的構建順序,構件a 構件b...