Иногда возникает необходимость инициализировать класс singleton с некоторыми вспомогательными значениями. Но мы не можем «публиковать» конструктор для него. Каков обходной путь для этого?как инициализировать Singleton?
Внимание! перегрузка GetInstance или установка цвета - это не моя идея. Цвет должен быть установлен только один раз. Я хотел бы быть уверенным, что MyPainter рисует ТОЛЬКО с инициализированным цветом. Должен использоваться любой цвет по умолчанию.
Для большей ясности я предоставить образец:
''' <summary>
''' Singleton class MyPainter
''' </summary>
Public Class MyPainter
Private Shared _pen As Pen
Private Shared _instance As MyPainter = Nothing
Private Sub New()
End Sub
''' <summary>
''' This method should be called only once, like a constructor!
''' </summary>
Public Shared Sub InitializeMyPainter(ByVal defaultPenColor As Color)
_pen = New Pen(defaultPenColor)
End Sub
Public Shared Function GetInstance() As MyPainter
If _instance Is Nothing Then
_instance = New MyPainter
End If
Return _instance
End Function
Public Sub DrawLine(ByVal g As Graphics, ByVal pointA As Point, ByVal pointB As Point)
g.DrawLine(_pen, pointA, pointB)
End Sub
End Class
Спасибо.
нет, перегрузки GetInstance не была моей хорошей идеей. Я хотел бы заверить, что MyPainter рисует ТОЛЬКО с инициализированным цветом. Любой цвет по умолчанию по умолчанию должен использоваться. – serhio
То, как я перегрузил GetInstance, только установил цвет пера один раз (в первый раз он называется).Вы можете добавить дополнительный общий элемент, чтобы узнать, был ли класс иналинизирован. Я обновил образец кода. Дайте мне знать, если это еще не то, что вы ищете. –
Согласен. Однако у вашей функции нет прозрачного смысла быть публичным и может вызвать ошибку (новый) разработчик ... И во-вторых, только я, этот создатель синглтона, будет знать и помнить, не забудьте установить цвет перед его использованием. _IsInitialized = True без параметров GetInstance неверен, потому что я ничего не знаю о том, был ли цвет инициализирован или нет. – serhio