C#中的简单工厂模式
Simple Factory Pattern in C#
我正在尝试创建一个简单的工厂模式。下面是我的示例代码:
手机:
namespace SimpleFactory
{
public interface IMobile
{
void Hello();
}
}
IPhone:
namespace SimpleFactory
{
public class Iphone : IMobile
{
public void Hello()
{
Console.WriteLine("Hello, I am Iphone!");
}
}
}
诺基亚
namespace SimpleFactory
{
public class Nokia : IMobile
{
public void Hello()
{
Console.WriteLine("Hello, I am Nokia!");
}
}
public void NokiaClassOwnMethod()
{
Console.WriteLine("Hello, I am a Nokia class method. Can you use me
with Interface");
}
}
移动工厂:
namespace SimpleFactory
{
public class MobileFactory
{
public IMobile GetMobile(string mobileType)
{
switch (mobileType)
{
case "Nokia":
return new Nokia();
case "iPhone":
return new Iphone();
default:
throw new NotImplementedException();
}
}
}
}
节目:
namespace SimpleFactory
{
class Program
{
static void Main(string[] args)
{
MobileFactory factory = new MobileFactory();
IMobile mobile = factory.GetMobile("Nokia");
mobile.Hello();
mobile.NokiaClassOwnMethod();
}
}
}
我想访问诺基亚和 Iphone 的 NokiaClassOwnMethod 方法。我可以访问诺基亚或 Iphone class 的 NokiaClassOwnMethod 方法吗?如果不是,为什么? (我可以将这个 NokiaClassOwnMethod 方法添加到接口并能够访问它。但我的问题是如何访问 class 自己的方法?)
为此,您需要将 Hello
方法添加到您的界面:
public interface IMobile
{
void Hello();
}
之前无法访问,因为您的工厂方法返回了一个接口,而接口不包含 Hello()
方法。所以在运行时可以返回不同的类型,当你调用 Hello
子特定的 class 实现时将被调用。
如果你想访问接口中不存在但在具体实现中的 method/property ,你需要转换:
MobileFactory factory = new MobileFactory();
IMobile mobile = factory.GetMobile("Nokia");
var iPhone = mobile as Iphone;
if(iPhone != null) iPhone.Hello();
我正在尝试创建一个简单的工厂模式。下面是我的示例代码:
手机:
namespace SimpleFactory
{
public interface IMobile
{
void Hello();
}
}
IPhone:
namespace SimpleFactory
{
public class Iphone : IMobile
{
public void Hello()
{
Console.WriteLine("Hello, I am Iphone!");
}
}
}
诺基亚
namespace SimpleFactory
{
public class Nokia : IMobile
{
public void Hello()
{
Console.WriteLine("Hello, I am Nokia!");
}
}
public void NokiaClassOwnMethod()
{
Console.WriteLine("Hello, I am a Nokia class method. Can you use me
with Interface");
}
}
移动工厂:
namespace SimpleFactory
{
public class MobileFactory
{
public IMobile GetMobile(string mobileType)
{
switch (mobileType)
{
case "Nokia":
return new Nokia();
case "iPhone":
return new Iphone();
default:
throw new NotImplementedException();
}
}
}
}
节目:
namespace SimpleFactory
{
class Program
{
static void Main(string[] args)
{
MobileFactory factory = new MobileFactory();
IMobile mobile = factory.GetMobile("Nokia");
mobile.Hello();
mobile.NokiaClassOwnMethod();
}
}
}
我想访问诺基亚和 Iphone 的 NokiaClassOwnMethod 方法。我可以访问诺基亚或 Iphone class 的 NokiaClassOwnMethod 方法吗?如果不是,为什么? (我可以将这个 NokiaClassOwnMethod 方法添加到接口并能够访问它。但我的问题是如何访问 class 自己的方法?)
为此,您需要将 Hello
方法添加到您的界面:
public interface IMobile
{
void Hello();
}
之前无法访问,因为您的工厂方法返回了一个接口,而接口不包含 Hello()
方法。所以在运行时可以返回不同的类型,当你调用 Hello
子特定的 class 实现时将被调用。
如果你想访问接口中不存在但在具体实现中的 method/property ,你需要转换:
MobileFactory factory = new MobileFactory();
IMobile mobile = factory.GetMobile("Nokia");
var iPhone = mobile as Iphone;
if(iPhone != null) iPhone.Hello();