这个工厂的例子; http://www.dotnetperls.com/factory 返回1件事。如何更改它以返回这样的内容;
string device = "";
string deviceTypeID = "";
int deviceTypeCode = 0;
bool true
作为一个例子,在每个具体的课程中,我会看起来像这样;
string device = "bracelet";
string deviceTypeID = "male";
int deviceTypeCode = 0;
bool true
或者,对于另一个具体的类;
string device = "ring";
string deviceTypeID = "female";
int deviceTypeCode = 8;
bool false
我想我需要在每个具体的类中创建一个对象,但由于我对C#很陌生,这是我的理解。
谢谢!
答案 0 :(得分:2)
将它们组合在一起class
sealed class MyClass
{
public MyClass(string device, string deviceTypeId, int deviceTypeCode, bool someBool)
{
this.Device = device;
this.DeviceTypeId = deviceTypeId;
this.DeviceTypeCode = deviceTypeCode;
this.SomeBool = someBool
}
string Device { get; private set; }
string DeviceTypeId { get; private set; }
int DeviceTypeCode { get; private set; }
bool SomeBool { get; private set; }
}
然后将其返回factory
。
return new MyClass("bracelet", "male", 0, false);
您的课程实施可能会有所不同,我已在此处实施,以便您只能从中进行阅读(制作后无法更改)。
答案 1 :(得分:2)
定义一个新类(或结构,如果您要创建大量这些类):
public class Container
{
public string Device;
public string DeviceTypeID;
public int DeviceTypeCode;
public bool MyBool;
}
然后让你的工厂创建这个类并将其返回:
return new Container { Device = "bracelet", DeviceTypeID = "male" };
答案 2 :(得分:0)
我想在Adam Kewley的回答中添加一些内容。如果您的工厂要创建并返回许多项目,那么设置静态字典并通过其键引用它们可能会很有用。在现实世界中,您可能将“设备”存储在数据库中并由程序缓存,但这可能是您探索实施工厂模式细节的有用方法。
class ItemFactory
{
private static readonly Dictionary<string, MyClass> knownItems = new Dictionary<string, MyClass>
{
{"bracelet", new MyClass("bracelet", "male", 0, true)},
{"ring", new MyClass("ring","female",8,false)}
};
public MyClass createItemByType(string itemType)
{
if (knownItems.ContainsKey(itemType))
return (knownItems[itemType]);
// default behavior if an item isn't found.
// maybe throw an exception here, depending on your needs.
return new MyClass(); // unknown item
}
}