我正在开发一个使用 JavaFX 的项目,类通常有 800-1200 行。我们使用 fxml 来显示 Node 元素,但此类仍然非常复杂。我的具体要求如下:
类 ReservationUI
包含子部分,这些子部分目前被模块化为内部类。它又包含子部分。并且此类可以访问 ReservationUI
的字段。现在我喜欢将它们提取到自己的类中,但现在我需要访问父类。
class A{
int x; int y;
B b;
public A(){
b = new B();
b.display();
}
private class B{
private C c;
/* modify x */
}
private class C{
/* modify x and y */
}
}
当我现在提取它们时,我的依赖关系更糟:
class A {
int x; int y;
B b;
public A(){
b = new B(this);
b.display();
}
}
class B {
C c;
A a;
public B ( A parent ){
c = new C(this, parent);
a = parent;
/* call A.modifyX(c.get) */
}
class C{
A a;
B b;
public C( B parent , A root){
a = root;
b = parent;
}
}
我认为模块化是严重错误的。特别是当我有这样一个关系时: root -> child -> child -> child ... 。
有没有一种设计模式可以解决这个问题。据我所知,有中介者模式,但使用它仍然没有带来太多,因为我仍然需要基本上做同样的事情。
最佳答案
做到这一点的最好方法是使用某种依赖注入(inject)。然后 Controller 自动解决依赖关系。我假设您不需要任何提供它的企业框架,因此您必须以某种方式手动解决依赖关系。
中介者模式的目的是将依赖管理简单地封装在一个地方。在我的解决方案中,根元素 A 充当中介。它的副作用是子元素在短时间内以未初始化状态存在。为了解决这个问题你还可以引入Builder模式。
interface IA{
/*...*/
void modifyX(int x);
}
class A implements IA{
int x; int y;
IB b;
IC c;
public A(){
b = new B();
c = new C();
resolveDependencies();
b.init();
b.display();
}
public void resolveDependencies(){
b.setC(c);
b.setA(this);
c.setA(this);
c.setB(b);
}
}
interface IB {
void setC(IC c);
void setA(IA a);
void init();
void display();
}
class B implements IB{
IC c;
IA a;
public B (){
}
@Override
public void setC(IC c){
this.c = c;
}
@Override
public void setA(IA a){
this.a = a;
}
@Override
public void init(){
/* call A.modifyX(c.get) */
}
}
interface IC {
void setA(IA a);
void setB(IB b);
}
class C implements IC{
IA a;
IB b;
public C( ){
}
@Override
public void setA(IA a){
this.a = a;
}
@Override
public void setB(IB b){
this.b = b;
}
}
关于java - 亲子结构的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24221465/