Java 这是什么设计模式?

Java 这是什么设计模式?,java,language-agnostic,design-patterns,architecture,Java,Language Agnostic,Design Patterns,Architecture,我知道我们在编程中所做的一切都可以描述为设计模式(甚至抽象方法也有称为模板方法的设计模式) 公共类Guicer扩展了抽象模块{ 私有静态注入器Injector=Guice.createInjector(新的Guicer()); 公共静态空隙设置注入器(注入器){ Guicer.injector=注入器; } 公共静态getInstance(c类){ 返回injector.getInstance(c); } @凌驾 受保护的void configure(){ } } 此代码中使用了哪些设计模式

我知道我们在编程中所做的一切都可以描述为设计模式(甚至抽象方法也有称为模板方法的设计模式)


公共类Guicer扩展了抽象模块{
私有静态注入器Injector=Guice.createInjector(新的Guicer());
公共静态空隙设置注入器(注入器){
Guicer.injector=注入器;
}
公共静态getInstance(c类){
返回injector.getInstance(c);
}
@凌驾
受保护的void configure(){
}
}

此代码中使用了哪些设计模式?我想调用该类GuiceStateHolder,但我不确定。

此代码段不代表来自的设计模式。
模式(Singleton除外)通常表示比设置可更改的默认实现更复杂的关系。

是的,我同意这不是任何模式的典型示例,但我看到依赖注入的元素(显然,它使用的是Guice)和工厂方法(
getInstance()
),我称之为:

private static Injector injector = Guice.createInjector(new Guicer());

public static void setInjector(Injector injector) {
    Guicer.injector = injector;
}
只写全局变量

在这里:

public static <T> T getInstance(Class<T> c) {
    return injector.getInstance(c);
}
公共静态getInstance(c类){
返回injector.getInstance(c);
}
用全局函数替换实例方法。所以你基本上有一个全局变量,任何人都可以写,但是你只能对它调用一个方法。由于注入器在其接口中有更多的内容,所以它可能是某种受限的外观

但它们更多的是习惯用法,而不是模式——模式也会描述它试图实现的期望行为,而习惯用法则是您如何在代码中进行操作


除非它是一种与单个习惯用法有很强联系的模式,否则就不可能从代码中逆向工程模式。

“我们在编程中所做的一切都可以被描述为设计模式”一个常见的错误设计模式可以帮助您构建东西。不要担心过于严格地适应它们,否则它们会开始妨碍您。“我们在编程中所做的一切都可以被描述为设计模式”在某种程度上是正确的,但其中一些模式有“意大利面代码”等名称,实际上是反模式的。请参阅Christer Ericson的这篇博客文章“使用setInjector,您可以更改整个应用程序中使用的injector的实现。另外,我认为getInstance是一种时尚。这个页面没有所有的设计模式,只有一些常见的模式。没有“所有设计模式”的明确列表。@Andreas Brink-我同意你需要一些目录,比如,GoF等@Andreas:如果
.getInstance()
总是返回相同的对象(我假设它会返回),那么这是一个单例。但是,如果它可能返回单独的实例(可能是DI对象被更新/替换了?),那么它就是一个工厂方法。@Esko Yep,我误读了原始代码,这就是为什么我删除了我的注释。@Andreas:显然,它会将注释缓存一段时间,以便在我发布回复后为我显示。不用担心,tho’:)
public static <T> T getInstance(Class<T> c) {
    return injector.getInstance(c);
}