Я действительно не знаю, как правильно назвать этот вопрос. У меня есть определенный сценарий, когда у меня есть объект, который нужно удалять при каждом использовании. Причины этого носят двоякий характер:Гарантия нескольких экземпляров объекта
- Я должен гарантировать, что каждая переменная-член (поле) инициализируется до любого нового использования.
- Я должен гарантировать, что не существует двух методов вызова этого объекта одновременно, поскольку он не является потокобезопасным.
Оба причин может быть покрыт в объекте, имея каждый публичный метод блокировки же семафора и инициализацию каждый переменного на частный метод, который также называют на каждом публичном методе.
Это решение подвержено ошибкам и имеет побочный эффект сериализации доступа по многопоточному сценарию, так как я буду блокировать объект перед его использованием. Конечно, сайт вызова может затем создать новый экземпляр перед вызовом метода (удаление побочного эффекта), но он также подвержен ошибкам.
Так что я придумал решение, которое я нахожу, как чистый и очень странно:
Мой объект разоблачить статические методы, которые имеют в качестве параметров переменные, необходимые для обоих создать новый экземпляр объекта и выполнить метод , Этот статический метод создает экземпляр объекта, а затем вызывает необходимый метод.
Конечно, конструктор является закрытым.
Первое, что я заметил при рассмотрении этого решения, заключается в том, что мой объект очень похож на процедурный метод, поскольку каждый новый вызов метода требует нового объекта. Но ответственность за объект хорошо подходит этой схеме.
Мои вопросы (наконец !, я знаю), являются:
- Есть шаблон, который будет придерживаться моих требований (всегда используя новый экземпляр объекта)?
- Есть ли образец, описывающий мой подход? Или это анти-шаблон?
- Помимо того факта, что объект кажется коллекцией процедурных функций, есть ли у меня другая причина, не имея такого подхода?
Благодарим за любые комментарии.
Есть ли конкретный язык вы ориентируетесь, или вы собираетесь для этого запросить более общий совет? –
Я бы создал новый класс, возможно, не имел состояния и заменил все статические методы на нестатический метод в новом классе. Не знаю, если это поможет, но это лучше для тестирования и выглядит менее странно. – maaartinus
@ Коди: Прямо сейчас, я работаю с C#, однако, я думаю, было бы лучше, если бы ответы были более общими. –