Design patterns 工厂设计模式扩展
我正在读《工厂》的章节。我正在考虑修改我的工作代码来实现它 首先,我使用GetAction创建IAction和ActionFactory,从IAction创建UploadDatabase、CopyFile、UploadSharepoint等。它位于DLL中,可以从exe调用。这很容易做到 然后,我计划从IAction创建AutoAdaction,其中包括打印、脚本等操作。这些操作只能在AutoCAD内部运行 现在我想用override GetAction创建AutoCADActionFactory,它将创建ActionFactory和AutoCADAction。现在我输了 以下是示例代码: 在ActionFactory.GetAction中Design patterns 工厂设计模式扩展,design-patterns,factory-pattern,Design Patterns,Factory Pattern,我正在读《工厂》的章节。我正在考虑修改我的工作代码来实现它 首先,我使用GetAction创建IAction和ActionFactory,从IAction创建UploadDatabase、CopyFile、UploadSharepoint等。它位于DLL中,可以从exe调用。这很容易做到 然后,我计划从IAction创建AutoAdaction,其中包括打印、脚本等操作。这些操作只能在AutoCAD内部运行 现在我想用override GetAction创建AutoCADActionFactor
public IAction GetAction(ActionType myActionType)
{
switch (myActionType)
{
case ActionType.UploadDatabase:
return new UploadDatabase();
case ActionType.CopyFile:
return new CopyFile();
case ActionType.UploadSharepoint:
return new UploadSharepoint();
}
}
我如何编写AutoAdactionFactory.GetAction,是否正确
public AutoCADAction GetAction(ActionType myActionType)
{
return Base.GetAction;
switch (myActionType)
{
case ActionType.Print:
return new Print();
case ActionType.Script:
return new Script();
...
}
}
谢谢,我不完全相信工厂,或者更准确地说,a(正如您试图使用它)是这里的正确选择。我这么说的原因是你似乎忽略了一些事情 通常,工厂方法在执行类似操作时最有意义,例如从不同格式的文件中读取位图图像。您定义的操作似乎差异很大,我不认为它们应该表示相同类型的操作(即支持相同的接口)。当然,您的操作没有理由不支持多个接口(例如,Print类可以同时实现IAction和IPrint),但是如果没有其他信息,我确实想知道底层设计是否像它应该的那样可靠 由于您在ActionFactory和AutoAdactionFactory中使用相同的ActionType枚举,您可能希望/需要定义ActionFactory返回的“null”操作。(根据上下文的不同,您可能希望null操作做一些有用的事情,比如弹出一个消息框,说“此上下文中不支持该操作”,但它也可以轻松地什么都不做。)null操作应该在“默认”情况下返回 按照当前编码,您将始终从基类返回操作。您可能想要看起来更像这样的东西:
public AutoCADAction GetAction(ActionType myActionType)
{
switch (myActionType)
{
case ActionType.Print:
return new Print();
case ActionType.Script:
return new Script();
default:
return base.GetAction(myActionType);
}
}
这将允许您完全替换ActionFactory提供的操作(我认为这是最可能需要的),或者执行专门的操作,例如返回一个专门的操作,该操作除了来自基类的操作之外,还执行一些特定的操作
您可能还想考虑共同的面向对象原则,“有利于封装而不是继承”。在这种情况下,我看不到继承ActionFactory的任何真正好处。对于类,每个操作类型都有单独的调用,继承提供了更大的好处
这些有帮助吗?“现在我输了”?怎么用?请正确格式化您的代码,并详细说明您是如何丢失的。是什么阻止了你?你还需要知道什么?