代码之家  ›  专栏  ›  技术社区  ›  IAdapter

这是什么图案?

  •  3
  • IAdapter  · 技术社区  · 15 年前

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

    
    public class Guicer extends AbstractModule {
        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);
        }
    
        @Override
        protected void configure() {
    
        }
    }
    

    此代码中使用了什么设计模式?我想称那个类为guicestateholder,但我不确定。

    3 回复  |  直到 15 年前
        1
  •  1
  •   Pete Kirkham    15 年前

    好吧,我称之为:

    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);
    }
    

    将实例方法替换为全局函数。所以你基本上得到了一个全局变量,任何人都可以写,但是你只能对它调用一个方法。由于注入器在其接口中具有更多的内容,因此它可能是某种受限的外观。

    但它们更多的是习惯用语,而不是模式——模式还将根据所需的行为描述它试图实现的目标,而习惯用语则是您如何在代码中执行某些操作。

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

        2
  •  2
  •   Sean Owen    15 年前

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

        3
  •  1
  •   stacker    15 年前

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