2015-01-14 2 views
2

Я разрабатываю библиотеку, которая будет использоваться клиентским кодом третьей части. В моей библиотеке мы создаем экземпляр для класса SocketJobModel, который используется для отправки данных через сокет. Во всех экземплярах объекта SocketJobModel нам нужно выполнить какое-то задание на регистрацию, в настоящее время я разрешаю всем экземплярам объекта SocketJobModel использовать один и тот же объект регистрации через статический файл класса Factory, должен ли я это сделать? Если мой объект IMessageLogger является потокобезопасным, это нормально?java, статическое поле или поле экземпляра?

public class Factory { 

    static IMessageLogger msgLogger; 

    public static SocketJobModel create(){ 
     return new SocketJobModel(); 
    } 
} 

редактировать

Примечание: IMessageLogger будет реализован клиентский код клиента code.And может использовать различные базы данных каротажа, log4j и JDK протоколирования или что-то еще. Этот сервер интерфейса в качестве адаптера для другого механизма ведения журнала, используемого клиентским кодом. И почему я хочу использовать статическое поле в первую очередь? для уменьшения использования памяти.

+1

не должен ли вы добавлять msgLogger IMessageLogger внутри SocketJobModel? – shikjohari

ответ

0

Как вы можете быть уверены, что IMessageLogger является потокобезопасным, если это реализовано клиентским кодом?

Возможно, вы можете оставить запрос экземпляра регистратора до IMessageLogger, выполнив метод getLogger в интерфейсе? Таким образом, клиентский код может решить, как поставить экземпляр Logger (будь он статическим или нет)

+0

В моей документации, я сказал, «внедрение IMessageLogger должно быть потокобезопасным» – CaiNiaoCoder

+0

Вы не гарантируете, что клиент может выполнить ваши требования, если у вас нет процесса обзора. –

Смежные вопросы