我可以将这种设计模式应用于这种情景吗?
我有实现BaseProcess类的进程类: BaseProcess有一个CreateProcess(BaseObject o)方法,BaseObject有两个子项或多个。
ProcessClassA : BaseProcess
ProcessClassB : BaseProcess
ObjectA : BaseObject
ObjectB : BaseObject
我希望能够拥有一个可以具有多个ProcessClasses的类Process,就像在这种情况下的2个类一样,但是将来可能有更多类,例如3个或更多类和那个进程。我想使用这样的类:
Process.Process(BaseObject o)并发送特定对象,如果我发送ObjectA,则让Process类调用特定的类,如ProcessClassA。问题是我不想使用如果内部进程因为我在添加ProcessClassC时需要一个类
示例:
ObjectA exampleObj = new ObjectA
Process p = new Process(List<BaseProcess>{ProcessClassA ,ProcessClassB }) //Something like this but dont need to be in the contructor or be a list could be //something else but that allows not to violate Open Close principle.
p.Process(exampleObj) => ProcessClassA.Process(exampleObj)
答案 0 :(得分:1)
如果您不想在Process Manager类中使用if子句,那么映射如何?
像这样;HashMap<Class, BaseProcess> processMap = new HashMap<Class, BaseProcess>();
processMap.put(ObjectA.class, new ProcessClassA());
processMap.put(ObjectB.class, new ProcessClassB());
//... so on
Process p = new Process(processMap);
p.process(new ObjectA());
进程方法和构造函数应该类似于Process Manager类
中的那个private HashMap<Class, BaseProcess> processMap;
public Process(HashMap<Class, BaseProcess> processMap)
{
this.processMap = processMap;
}
public void process(BaseObject objectInstance)
{
//"which returns ProcessClass?:BaseClass"
processMap.get(objectInstance.getClass()).process(objectInstance);
}
我假设您的ProcessClassA或B(BaseProcess)是无状态的。如果没有,如果你想为每个ObjectA的实例创建ProcessClassA,那么你需要像这样更改你的hashmap
HashMap<Class, Class>
所以你可以将ObjectA.class绑定到ProcessA.class。并在Process Class构造函数中创建ProcessA类的实例。
此外,我确信将有更好的方法来命名这些类尝试使用抽象类和通用类型。