gpt4 book ai didi

java - 如何结合状态设计模式和依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-01 12:26:58 27 4
gpt4 key购买 nike

我试图了解如何在 Java 1.7 代码中组合它们(如果可能):

class View{
private State _state;
}

abstract class State{
protected View _view;
}

class UserState extends State{}
class AdminState extends State {}

我尝试使用这些文章更好地理解它们:dependency-injectionstate-design-pattern 。但我最终只是更加困惑。

我的问题是:

  • 我可以以某种方式在 View 类中注入(inject) State 并避免保留 State 实例吗?

  • 我的代码中缺少什么来实现它?

提前致谢。

最佳答案

您遇到的问题是依赖注入(inject)初学者的常见问题。您正在尝试进行循环依赖注入(inject)。我认为this article to be the canonical reference on the subject 。阅读那篇文章,它比我要做的更好。

但是,简单地说:您正在尝试执行此操作(从文章中盗用的图片):

+---------+      +---------+
| A |<-----| B |
| | | |
| |----->| |
+---------+ +---------+

您首先注入(inject)哪个类?如果您尝试创建 B,则需要一个 A。但如果没有 B,就无法生成 A。等等。

您可以采取这样的解决方法:

public class A {
private final B b;
A(B b) {
this.b = b;
}
}

public class B {
private /*not-final*/ A a;
public void setA(A a) {
this.a = a;
}
}

But this is a code smell.最好这样做:

                         +---------+
+---------+ | B |
| A |<-------------| |
| | | |
| | +---+ | |
| |--->| C |<----| |
| | +---+ +---------+
+---------+

Read the article for the code sample

关于java - 如何结合状态设计模式和依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26257761/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com