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();