建造者模式是最後乙個建立型設計模式,也是研究物件的建立。
將乙個複雜物件的建立與它的表示分離,使得同樣的構建過程可以建立不同的表示。建立和表示是什麼意思?
表示就是外在,物件具體的樣子,而內部構建過程是一種組裝的概念,有點像套娃,同樣的結構,但是卻產生了不同大小的樣子。
按照慣例,先講故事。
假設要生產一部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想知道怎樣安排加工順序可以使他要交的罰金最少,最少是多少...