В одноэлементном шаблоне поле Logger
является статическим для класса:
public class SomeAwesomeClass {
private static final Logger logger = Logger.getLogger(SomeAwesomeClass.class);
}
Альтернатива состоит в том, чтобы сделать поле Logger
нестатичным (то есть каждый экземпляр SomeAwesomeClass
содержит ссылку на Logger
):
public class SomeAwesomeClass {
private final Logger logger = Logger.getLogger(SomeAwesomeClass.class);
}
Я не думаю, что имеет большое значение, какой маршрут вы выберете, так как я считаю, что Log4j будет постоянно возвращать один и тот же экземпляр Logger
для каждогоэкземпляр SomeAwesomeClass
.На самом деле, это просто ненужные ссылки на объекты, так что вы можете также использовать шаблон синглтона.
Однако , шаблон не-синглтон становится необходимым, если вы делаете что-то вроде этого:1018 *
Позже ...
SomeAwesomeClass o = new AwesomerClass();
o.doSomething();
В этом примере поле logger
будет соответствовать AwesomerClass
, а не SomeAwesomeClass
.