零件組裝技術 建造者模式深度解析

2022-07-04 10:00:20 字數 2216 閱讀 3783

建造者模式是最後乙個建立型設計模式,也是研究物件的建立。

將乙個複雜物件的建立與它的表示分離,使得同樣的構建過程可以建立不同的表示。

建立和表示是什麼意思

表示就是外在,物件具體的樣子,而內部構建過程是一種組裝的概念,有點像套娃,同樣的結構,但是卻產生了不同大小的樣子。

按照慣例,先講故事。

假設要生產一部iphone和一部ipod。我們要怎麼做?

public class iphone
建造者模式 = buildx() + construct() + (optional)ifx()

private string camera;

private string touchscreen;

private string communication;

//省略getter,setter方法。

public abstract void buildcamera();

public abstract void buildtouchscreen();

public abstract void buildcommunication();

public boolean ifcommunication() }}

@override

public void buildcamera()

@override

public void buildtouchscreen()

@override

public void buildcommunication()

@override

public boolean ifcommunication()

} @override

public void buildcamera()

@override

public void buildtouchscreen()

@override

public void buildcommunication()

}最後,要加入關鍵的導演類,這裡是車間類,用於真正的組裝工作,對外提供裝配方法construct();

public class workshop 

}}

這樣,就可以直接在客戶端呼叫了。

public static void main(string args)
public static void main(string args)
配置檔案

<?xml version="1.0"?>

construction.iphone

建立xmlutil類

public class xmlutil  catch (exception e) 

return null;

}}

以上就是第一次建造的全部**了。我們可以清晰地看到完整的建造者模式的結構。幾個要注意的點是:

我們去掉了具體的物件類,而是直接採用builder的方式,將每個物件具體的內容實現在其裡面。

builder要抽象出來乙個基類,要包含上面的那個總物件以及該物件的對外獲取方法。同時要注意設定該物件為protected,因為其子類builder們要直接使用該物件,給該物件的屬性賦值。

最重要的導演類,此例中的車間類,只提供乙個construct方法,我覺得設定為static更好,外部可以直接通過類來呼叫。該方法內部要去呼叫具體的buildx的順序。

這一次建造致力於最大限度精簡化,此次建造屬於探索性建造,不一定用於生產環境。

public static void main(string args)
所以當系統業務比較複雜的時候,不推薦省略導演類,完整的建造者模式會提高**的可讀性,以及更好的擴充套件。

當要建立的物件內部屬性比較複雜,且與其他物件有公共的部分的時候。然後他們的內部屬性結構一定要穩定。

需要生成的物件屬性可以變成buildx的形式,對屬性賦值的順序有要求。

隔離複雜物件的建立和使用,並使得相同的建立過程可以建立不同的產品。

建立過程是在導演類中進行,這就與使用隔離開來。

零件組裝技術 建造者模式深度解析

建造者模式是最後乙個建立型設計模式,也是研究物件的建立。將乙個複雜物件的建立與它的表示分離,使得同樣的構建過程可以建立不同的表示。建立和表示是什麼意思?表示就是外在,物件具體的樣子,而內部構建過程是一種組裝的概念,有點像套娃,同樣的結構,但是卻產生了不同大小的樣子。按照慣例,先講故事。假設要生產一部...

SHOI2015 零件組裝機

shoi2015 零件組裝機 同機房大佬想性質想了很久,我從樹的思想搞很快搞出來了 言歸正傳,這道題目從樹的思路想是比較簡單的,關鍵是建樹。現在講講建樹 對於一條邊,預設是從編號大的連向編號小的有向邊。那麼,設x xx連向的編號最大的點為y yy,那麼x,y x,yx,y是什麼關係?我們規定乙個聯通...

零件加工(貪心)

時間限制 1 sec 記憶體限制 128 mb 題目描述 工匠小k最近有n個零件需要加工。每個零件都需要ti天的時間來完成,每個零件每延遲一天加工都要繳納一定的罰金si。延遲的天數為從今天算起到該工作開始的那天,第乙個零件加工沒有罰金。現在小k想知道怎樣安排加工順序可以使他要交的罰金最少,最少是多少...