powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Singleton
23 сообщений из 23, страница 1 из 1
Singleton
    #32399074
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как в VFP реализовать этот pattern. Т.е. у меня есть модуль( class library) - мне хотелось бы чтобы для этого модуля во время выполнения существовал только один объект определенного класса
...
Рейтинг: 0 / 0
Singleton
    #32399120
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то singleton это вроде несколько другое понятие. Насколько я понимаю это тоже самое что в multithreaded apartment в СОМ.

А то что тебе нужно ищи в сторону ainstance()
...
Рейтинг: 0 / 0
Singleton
    #32399121
Фотография Hel!Riser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
без понятия ч:е это такое, но если в методе Init() объекта вернуть фальш, то объект не создаца. Соотв в нем нужно устроить проверку есть ли ссылка на этот объект или типа того
...
Рейтинг: 0 / 0
Singleton
    #32399124
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати если класс является формой то очень полезная функция
wexists() . С помощью нее обычно отключают пункт меню чтобы нельзя было повторно вызвать туже форму.
...
Рейтинг: 0 / 0
Singleton
    #32399129
Por
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Por
Гость
Библиотеки классов, включенные в проект, добавляются в APP/EXE целиком во время компиляции, даже если обращения в программе к ним отсутствуют.

Так что, если задача заключается в выделении какого-то одного класса из библиотеки для использования в проекте, то эта задача решается ручками:

MODIFY CLASS ClassName OF ClassLibraryName.vcx, и последующее сохранение класса в новую библиотеку.

ЗЫ. Не стоит забывать, что у требуемого класса могут быть родители, из-за которых во время компиляции в проект целиком добавятся библиотеки, в которых они размещены.
...
Рейтинг: 0 / 0
Singleton
    #32399133
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавчик к сообщению Hel!Riser
Не только в Init но и в Load()
Примеры
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
define class MyClass as Session
proc Init
return (ainstance(aRefs) =  1  )
enddefine 

define class MyForm as Form
proc Init
return wexists( "MyForm" )
enddefine 
...
Рейтинг: 0 / 0
Singleton
    #32399139
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой последнее не правильно
define class MyForm as Form
proc Load
return !wexists("MyForm")
enddefine
...
Рейтинг: 0 / 0
Singleton
    #32399153
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы кстати сделал бы так

define class MainApplication AS Custom

func CreateSingleObject
lpara lcClassName

local array laIns[1]
local lnInstCount

lnInstCount = ainstance(laIns,lcClassName)
return iif(lnInstCount>0,laIns[1],createobject(lcClassName))

endfunc
enddefint
...
Рейтинг: 0 / 0
Singleton
    #32399156
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или просто функцию
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
func CreateSingleObject 
lpara lcClassName 

local array laIns[ 1 ] 
local lnInstCount 

lnInstCount = ainstance(laIns,lcClassName) 
return iif(lnInstCount> 0 ,laIns[ 1 ],createobject(lcClassName)) 

endfunc
******************
loNewInstance = CreateSingleObject( "MyClass" ) 
...
Рейтинг: 0 / 0
Singleton
    #32399171
Фотография Hel!Riser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:)) Crip, тихо сам с собою я веду беседу (с) :D
...
Рейтинг: 0 / 0
Singleton
    #32399203
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crip
Вообще-то singleton это вроде несколько другое понятие

Singleton - это патерн описывающий класс для которого может быть создан только 1 экземпляр и присутсвует глобальная точка входа


А то что тебе нужно ищи в сторону ainstance()

Спасибо - посмотрю
...
Рейтинг: 0 / 0
Singleton
    #32399241
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Hel!Riser
Тоже самое хотел написать
...
Рейтинг: 0 / 0
Singleton
    #32399269
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2funikovyuri
В чистом виде наверное не получится...
Можно комбинируя варианты которые я тебе предложил.
Описать в классе чтобы он не создавался в случае если его объект уже существует, а при создании проверять создался ли объект и получать ссылку на уже существующий
...
Рейтинг: 0 / 0
Singleton
    #32399273
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще один вопрос
- есть ли в VFP статические методы-члены классов?
...
Рейтинг: 0 / 0
Singleton
    #32399341
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет статических методов :(
Вместо этого надо юзать просто функции и процедуры либо объявлять методы в главном классе приложения
...
Рейтинг: 0 / 0
Singleton
    #32399344
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crip

Значит я все далал правильно...
...
Рейтинг: 0 / 0
Singleton
    #32399351
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть хилое подобие статических членов , которое скорее является особенностью поведения классов фокса.

Пример

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
o1 = new( "test" )
?o1.CurDate
* пауза  5  сек
o2 = new( "test" )
?o2.CurDate

define class Test as Session
    CurDate = datetime()
enddefine
...
Рейтинг: 0 / 0
Singleton
    #32401729
vklepko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Статических методов в VFP нет и от защищённых Init методов тоже будет мало толку.

Предлагаю создать процедуру Instance_Singleton, посредством которой допустимо создание объекта.
В Init методе сделать проверку на имя вызывающей процедуры. При попытке создать объект из другой процедуры возращать .f.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
clear
x = CreateObject( "_Singleton" )
if Vartype(x) =  "O" 
	? "x -" 
	??x.get_instance()
else
	? "X can not be created" 
endif
y =  Instance_Singleton()
if Vartype(y) =  "O" 
	? "y - " 
	??y.get_instance()
endif
z = Instance_Singleton()
if Vartype(z) =  "O" 
	? "z - " 
	??z.get_instance()
endif

procedure Instance_Singleton
if Vartype(g_Singleton)<> "O"  or IsNull(g_Singleton)
	public g_Singleton
	g_Singleton = CreateObject( "_Singleton" )
endif
return g_Singleton
endproc

define class _Singleton as Custom
_instance =  ""
procedure Init
	if Program(Program(-1 )- 1 ) <> Upper("Instance_Singleton ")
		=MessageBox(" _Singleton can not be created directly. "+Chr(13 )+;
"Use <<Instance_Singleton>>")
		return .f.
	endif
	this._instance = Sys( 2015 )
endproc
procedure get_instance
	return this._instance
endproc
enddefine
...
Рейтинг: 0 / 0
Singleton
    #32402146
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 funikovyuri
... ну и как тут можно работать, а?

Желаю удачи!
...
Рейтинг: 0 / 0
Singleton
    #32402388
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2snake
Когда проектируешь приложение надо знать какие ограничения накладывает среда...
...
Рейтинг: 0 / 0
Singleton
    #32402410
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
особенно когда среда навязана.
...
Рейтинг: 0 / 0
Singleton
    #32402419
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кем и кому? Автору поста?
...
Рейтинг: 0 / 0
Singleton
    #32402595
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vklepko
Большое спасибо - буду смотреть

snake
Знаешь - в принципе - как оказалось - работать можно - и даже без каких-то глобальных проблем...
Пока меня раздражают 4 вещи
- отсутсвие типизации (ну не могу я после C++ это терпеть - и постоянно накалываюсь)
- отсутствие исключений (я пока на VFP7 - вот перейду на 8-ку - и тогда этот пункт отпадет)
- отсутствие транзакций (так как я работаю с унаследованной системой которой уже более 10 лет - то большая часть кода транзкации не использует и большинство таблиц не входят в .dbc)
- ужасный грид

Еще - к сожалению любымый мной PD9.5 про VFP не слышал :)

P.S> а так - мне эту систему никто не навязывал - так что я знал на что шел...:)
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Singleton
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]