2015-04-29 23 views
0

我不知道这是否可能,因此我需要您的帮助。 我想要做的是我想要添加对象到Vector。问题是这些对象是在另一个类中创建的。 这可能吗?在另一个类中创建的访问对象

这里是我的代码:

class Factory {  

    public Factory() {      
     Action run = new RunAction(); 
     Action climb = new ClimbAction(); 
    } 
} 



public class Game { 

    private Vector<Action> actions = new Vector<Action>(); 

    public Game(Factory fact) { 

     actions.add(XXXX); ****//What to write here to add the actions created in Factory? Somehow I want to use fact for this.** 

    } 
} 


class ClimbAction extends Action { 

    public ClimbAction() { 
     super("Try to climb\n"); 
    } 
} 


class RunAction extends Action { 

    public RunAction() { 
     super("Try to run\n"); 
    } 
} 


class TestClass { 

     Factory f = new Factory(); 
     Game game = new Game(f); 
} 

回答

3

更改您的工厂类此:

class Factory {  

    private Action run; 
    private Action climb 

    public Factory() {      
     run = new RunAction(); 
     climb = new ClimbAction(); 
    } 

    public Action getRunAction(){ return run; } 
    public Action getClimbAction(){ return climb; } 
} 

从这一点,你可以通过工厂类的实例提供访问runclimb。例如factory.run

您的代码仅在Factory类的构造函数的作用域中定义了两个变量runclimb。因此,他们只能从那里访问。

编辑

而且,你似乎想从所有工厂的操作添加到您的游戏。因此,我建议你添加的动作矢量,以你的工厂,并通过构造函数添加runclimb操作:

class Factory {  
    private Vector<Action> actions = new Vector<Action>(); 

    public Factory() {      
     actions.add(new RunAction()); 
     actions.add(new ClimbAction()); 
    } 

    public Vector getActions(){ return actions; } 
    public void setActions(Vector v){ actions = v; } 
} 

public class Game { 

    private Vector<Action> actions = new Vector<Action>(); 

    public Game(Factory fact) { 
     //add every action in factory to game actions. 
     for(Action a : fact.getActions()) 
      actions.add(a); 
    } 
} 

我希望这有助于!

+0

如果你冷静下来,你至少可以抽出时间来评论为什么请。 – rodit

+0

是的,我想将所有的操作添加到Vector中。感谢您的建议,这对我帮助很大! – user2939293

+0

@ user2939293没问题。很高兴我能帮上忙! – rodit

1

在工厂类创建variables,并提供对它们的访问(以下演示了通过经getter方法定义变量为私有,访问这样做)。

class Factory {  

    private Action run;//Access modifier is private 
    private Action climb; 

    public Factory() {      
     run = new RunAction(); 
     climb = new ClimbAction(); 
    } 
    public Action getRunAction(){ 
     return run; 
    } 
    public Acti8on getClimbAction(){ 
     return climb; 
    } 
} 

在构造函数中,使用工厂的getter方法来访问变量:

public Game(Factory fact) { 

    actions.add(fact.getRunAction()); ****//What to write here to add the actions created in Factory? Somehow I want to use fact for this.** 

} 
+0

谢谢,这可以做到! – user2939293

3

Factory类不是非常有用的尚未:它创建于建设两个对象......这可垃圾立即收集。

考虑一个工厂类是这样的:

final class Factory {  

    public [static] Action createRun() {      
     return new RunAction(); 
    } 

    public [static] Action createClimb() { 
     return new ClimbAction(); 
    } 
} 

该类看起来多了几分“工厂模式状”,和它(静态)/一个实例可以被用来填充你的载体。

+0

谢谢你,我会试试你的解决方案 – user2939293