Java 面向对象的方法是什么?(或者你的方法?)
我在使用一些通用的OOP和Java方法时遇到了困难。有多种方法可以让类/对象相互通信。举一个简单的例子:Java 面向对象的方法是什么?(或者你的方法?),java,oop,Java,Oop,我在使用一些通用的OOP和Java方法时遇到了困难。有多种方法可以让类/对象相互通信。举一个简单的例子: 我需要对象A来执行动作X 对象A需要P、Q和R来执行该动作X 然后对象A将自己检索p、Q和R(在动作X中),或者这些值必须是动作X的参数吗?如果这些值可以重用,则将它们(或其中的一部分)作为参数传递。另外,将它们创建为X中的局部变量。这是一个太笼统的问题,无法具体回答。在某些情况下,任何一种方法都是好的。一些因素: 将P、Q和R作为参数传递,可以更容易地重用和测试(请参阅) 如果P、Q
- 我需要对象A来执行动作X
- 对象A需要P、Q和R来执行该动作X
然后对象A将自己检索p、Q和R(在动作X中),或者这些值必须是动作X的参数吗?如果这些值可以重用,则将它们(或其中的一部分)作为参数传递。另外,将它们创建为X中的局部变量。这是一个太笼统的问题,无法具体回答。在某些情况下,任何一种方法都是好的。一些因素:
- 将P、Q和R作为参数传递,可以更容易地重用和测试(请参阅)
- 如果P、Q和R不在A之外的任何地方使用,则可以使它们成为本地方法
- 如果P、Q和R也用于A的其他方法,则它们可以成为成员
如果p、q和r与A的实例有一个强的有意义的链接,那么您可以考虑将它们添加为类A/<
public class A {
private P p;
private Q q;
private R r;
public A(P p, Q q, R r) {
this.p = p;
this.q = q;
this.r = r;
}
public void x() {
p.doSomething();
q.doSomething();
r.doSomething();
}
}
如果p、Q和R不是,只是帮助动作X执行其任务的“一些值”,那么您可能希望将它们用作参数
public class A {
public void x(P p, Q q, R r) {
p.doSomething();
q.doSomething();
r.doSomething();
}
}
第二个版本不维护任何状态,因此根据定义,它是线程安全的方法1
class A{
ctor(P, Q, R)
{
}
void X()
{
P.SomeMethod();
Q.SomeMethod();
R.SomeMethod();
}
}
方法2
class A{
void X(P, Q, R)
{
P.SomeMethod();
Q.SomeMethod();
R.SomeMethod();
}
}
类设计是软件设计的一个子集:所以这完全取决于 由于这个问题不太主观(每个人都有不同的方法),我只会说我使用这个方法,而不是说它是最好的。可能有很多不同的方法
public interface FuncX {
public void actionX(FuncP p, FuncQ q, FuncR r);
}
并让类实现这个接口。如果这两个类很小但相关,我让它们实现这两个接口
它使每个实现都非常容易测试。要引导系统,main方法必须创建特定类的实例。例如,这可以配置
public class MyFuncX implements FuncX, FuncP {
public void actionX(FuncP p, FuncQ q, FuncR r) {
...
}
public void actionP(...) {
...
}
}
// the caller:
FuncX x = new MyFuncX(); // dependency
FuncQ q = ...;
FuncR r = ...;
x.actionX(x, q, r);
对我来说,这听起来像是一份工作 基本上,将对象p、Q和R传递到A中,然后在所有对象中执行特定的方法。当您需要多个对象来执行同一操作时,将使用此模式。所以,正如wiki上的例子所说,您基本上可以做如下事情:
graphic1.add(ellipse1);
graphic1.add(ellipse2);
graphic1.add(ellipse3);
graphic.print();
和
graphic.print()
将在每个椭圆对象内调用print
方法。在项目中,如果对象p、Q、R的值位于动作X内,则在动作本身内创建对象。相反,如果生存期不依赖于操作X,则将其作为参数传递。还要注意对象P、Q、R的范围。我建议您在设计类之前先了解关联、聚合、组合和依赖等概念。理解这些概念后,根据对象的范围和生命周期进行调用。这是最方便的方法吗
您可以编写一个函数/方法来接受18个以上的参数,但这并不方便
如果执行操作A的方法总是得到相同的参数(并且您非常确定这不会改变),我不明白为什么需要通过参数传递它们
也就是说,我通常不遵守标准,也不知道其他OOP原教旨主义者(炒作大师)在这种情况下会做什么