您寫道:
我必須構建有不同的實現一個對象。
是不是具有來自不同類的不同實現對象的對象?
根據幾個來源the builder pattern有一個主任對象誰做的實際建設。你實例化一個具體構建器對象,它可以構建你想要的產品,並要求導演使用concree構建器來構建對象。
混凝土生成器是從類構建器派生而來的,或者實現了一個IBuild接口。導演知道如何建造建築商,並會調用適當的功能來建造產品。
一個典型的例子是如果你想能夠建造摩托車和汽車。你有一個類或接口VehicleBuilder與兩個派生類MotorCycleBuilder和CarBuilder。根據您希望作爲產品的需求構建MotorCycleBuilder或CarBuilder,並命令目錄構建產品。
回到你的問題。您希望能夠構建兩種產品:產品A和產品B.產品可能屬於同一類別,也可能屬於不同類別。
如果您想爲此使用構建器模式,您必須設計一個ABuilder和一個BBuilder。 ABuilders將提供產品A和BBuilders將提供產品B. ABuilder和BBuilder都來自Builder,或者至少有一個通用接口,如IBuild
現在,一旦您決定是要構建產品A還是產品B你執行以下操作:
Builder myBuilder = isProductARequested ? new ABuilder() : new BBuilder();
Director myDirector = new Director();
Product myProduct = myDirector.Build(myBuilder);
現在假設來構建你的產品,你需要做的BuildStep1()和BuildStep2(),然後ABuilder和BBuilder既要實現這些功能和IBuild接口具有這些功能,或從具有函數BuildStep1()和BuildStep2()的抽象類派生。
BuildStep1和BuildStep2的實際實現將確保生成不同的產品。這些產品可能具有相同類型或不同類型。