我理解這兩種模式(我認爲),但考慮到我的具體需求,我似乎無法找到解決方案或找到一個示例(所有示例都非常簡單)。設計構建或工廠模式
我的問題是,我想要某種工廠(或導演/等),創建可能或不可能有依賴關係的對象。
讓我們假設我有這樣的代碼:(我使用C#)
interface MyObject{
public void load();
public void update();
public void draw();
}
class ObjectA : MyObject{
public void load(){/*load*/}
public void update(){/*update*/}
public void draw(){/*draw*/}
}
class ObjectB : MyObject{
Texture texture;
public ObjectB(Content content){
texture = content.load("texture");
}
public void load(){/*load*/}
public void update(){/*update*/}
public void draw(){/*draw*/}
}
class ObjectC : MyObject{
Parent parent;
public void setParent(Parent parent){
this.parent = parent;
}
public void load(){/*load*/}
public void update(){
if(this.status == Status.Done){
parent.remove(this);
}
}
public void draw(){/*draw*/}
}
class Map : Parent{
MyObject myobj;
public void load(MapInfo map){
//This is what I want to achieve
myobj = MyObjectFactory.create(map.objectInfo);
//This is my problem. I don't really know how to solve this.
//I can't do this >
myobj.setParent(this); //error
//Unless I create a setParent method in interface, I don't know how to achieve this.
}
public void remove(MyObject obj){/*remove*/}
}
我真的不知道該如何實現這個:myobj.setParent(this);
。它不能在構造函數中(如ObjectB),因爲每個情況下Parent都不相同。
這是我必須爲我廠:
class MyObjectFactory{
Content content;
public MyObjectFactory(Content content){
this.content = content;
}
public MyObject create(objectInfo){ //suppose objectInfo is xml
//read xml
Type type = objectInfo.type;
//I'm totally fine with this. (Noob implementation)
switch(type){
case Type.A:
return new ObjectA();
break;
case Type.B:
//I'm also fine with this, unless there is a better way.
return new ObjectB(this.content);
break;
case Type.C:
return new ObjectC();
break;
}
}
}
到目前爲止對象A和對象B都不錯。 ObjectA很簡單。 ObjectB構造函數由Factory設置(Factory以前給出的變量爲content
)。
這留下了ObjectC,它需要Parent去除它(它可能不是最好的例子,試圖模擬不同的需求)。 我該如何做到這一點?
我只想出了一個解決方案:向MyObject接口添加一個方法,ObjectA和ObjectB將只有一個setParent方法,它不執行任何操作。
我希望這不會造成混淆。
編輯 我忘了在添加父:class Map : Parent
謝謝你讓我意識到創造型模式並不能解決我想要做的事情。 – OsakaHQ
歡迎.. :) –