有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

基于不同输入实现多种策略的java设计模式

有一种设计模式可以应用于这种场景吗

我有实现BaseProcess类的Process类: BaseProcess有一个CreateProcess(BaseObject o)方法,BaseObject有两个或多个子对象

 ProcessClassA : BaseProcess
 ProcessClassB : BaseProcess

 ObjectA : BaseObject 
 ObjectB : BaseObject 

我希望能够有一个类进程,它可以有多个ProcessClass,比如本例中的2个类,但将来可以有更多的类,比如3个或更多的类,以及这个进程。我想这样使用这个类:

过程。处理(BaseObject o)并发送特定对象,如果我发送ObjectA,则让Process类调用特定类,如ProcessClassA。问题是我不想在进程内使用if,因为我需要在添加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)  

共 (1) 个答案

  1. # 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());
    

    流程方法和构造函数应该与流程管理器类中的类似

    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了。类来处理。班并在Process class构造函数中创建ProcessA类的实例

    此外,我相信会有更好的方法来命名这些类,尝试使用抽象类和泛型类型