2009-11-12 84 views
2

的接口,我努力學習的接口,想嘗試以下對象:如何返回實現從方法

比方說,我有一個接口命名ICustomer定義基本屬性(用戶ID,用戶名,等等)。現在,我有多個具體類,如ProductA_User,ProductB_User,ProductC_User。每個人都有不同的屬性,但他們全都實施ICustomer,因爲他們都是客戶。

我想調用一個名爲MemberFactory的工廠類中的共享方法,並告訴它給我一個新用戶,我只是給它一個我想要的枚舉值的參數。由於每個具體類都不同,但實現了ICustomer,我應該能夠返回一個實現ICustomer的實例。但是,我不確定如何在工廠類中做到這一點,因爲我的退貨類型是ICustomer。

+0

需要注意的一點關於接口在.NET中:它們可以用作對象類型。因此,如果兩個隨機對象(汽車和電話)都實現了接口ILike,則可以通過指定ILike作爲函數的返回類型來使函數返回任一類型。 – Omar 2009-11-12 20:51:14

回答

7

所有你所要做的就是創建你的對象是這樣的:

class ProductA_User : ICustomer 
{ 
    //... implement ICustomer 
} 
class ProductB_User : ICustomer 
{ 
    //... implement ICustomer 
} 
class ProductC_User : ICustomer 
{ 
    //... implement ICustomer 
} 

class MemberFactory 
{ 
    ICustomer Create(ProductTypeEnum productType) 
    { 
     switch(productType) 
     { 
      case ProductTypeEnum.ProductA: return new ProductA_User(); 
      case ProductTypeEnum.ProductB: return new ProductB_User(); 
      case ProductTypeEnum.ProductC: return new ProductC_User(); 
      default: return null; 
     } 
    } 
} 
+0

有道理!謝謝您的幫助! – 2009-11-12 20:56:23

1

當你調用該方法時,你所要做的就是正常返回對象。它將它映射到它發揮作用的界面。

ICustomer obj = MemberFactory.ReturnObjectWhichImplementsICustomer(); 
0

工廠方法將包括代碼,做一些事情大致是這樣的:

switch (customerType) 
{ 
case CustomerType.A: 
    return new ProductA_User(); 
case CustomerType.B: 
    return new ProductB_User(); 
case CustomerType.C: 
    return new ProductC_User(); 
}