2014-07-06 49 views
0

我有一個創建一些實體的實體工廠。 我也有一個Person實體,用裝飾設計模式創建更具體的人物。 enter image description here膠模式,堅持兩種不同的設計模式

在我的工廠類,我有

public class EntityFactory { 
private final EntityType entityType; 

public enum EntityType{ 
ENTITY1, 
ENTITY2, 
PERSON1, 
CHILD 
}; //I want the user to select only one of those 

public EntityFactory(EntityType entityType){ 
    this.entityType = entityType; 
} 

public EntityType getEntity(){ 
    return entityType; 
} 

public Entity createEntity(){ 
    switch(entityType){ 
     case ENTITY1: return new Entity1(); 
     case PERSON1: return new Person1(new Person()); //problem 
     case CHILD: return new Child(new Person()) //problem 
     //... 
     default: return null; 
    } 
} 
} 

兩個ENTITY1和ENTITY2擴展實體,做工精細。當我嘗試創建PERSON1時,告訴我PERSON1不能轉換爲實體。這是可以理解的,因爲IPerson不存在於Entity內部。我的問題是我如何讓EntityFactory爲我創建一個特定的人?這兩者之間可能有什麼?我現在正在研究介體和適配器模式。感謝您的幫助。

回答

0

嘛,是人的實體?從你的圖表他們不是。如果Person擴展實體,它將工作得很好。

記:你有一個很重要的理由在這裏使用一個裝飾?遺傳不足夠嗎?

+0

我已經嘗試過了,問題remains.It不能轉換的學生:Entity.The我之所以用裝飾是因爲首先我學習設計模式,我想更多地瞭解他們 - 當然 - !其次我要dynamicaly在運行但不能創建這些實體的所有them.The用戶必須PERSON1和孩子之間選擇要created.You看,他們有一些共同的方法和我的邏輯告訴我,這是更apropriate _child ISA PERSON2,PERSON1和Person2 ISA Person和Person ISA Entity_.I試圖讓Person成爲一個實體,並沒有採取我想要的結果。 –

+0

在你輸入「case person 1」的行中,你返回一個Person,但你的方法說「public Entity createEntity()」。您只能返回實體的實體或子類。 – Styl

+0

這正是我想要解決的問題!我想讓Person及其所有子類成爲實現IPerson的實體。雖然我把它變成一個實體,但Person1不能轉換。 –