2009-11-12 80 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(); 
}