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

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

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

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

ЗЫ. Не стоит забывать, что у требуемого класса могут быть родители, из-за которых во время компиляции в проект целиком добавятся библиотеки, в которых они размещены.
...
Рейтинг: 0 / 0
05.02.2004, 12:20
    #32399133
Crip
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton
Добавчик к сообщению 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
05.02.2004, 12:24
    #32399139
Crip
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton
Ой последнее не правильно
define class MyForm as Form
proc Load
return !wexists("MyForm")
enddefine
...
Рейтинг: 0 / 0
05.02.2004, 12:32
    #32399153
Crip
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton
Я бы кстати сделал бы так

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
05.02.2004, 12:34
    #32399156
Crip
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton
Или просто функцию
Код: 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
05.02.2004, 12:44
    #32399171
Hel!Riser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton
:)) Crip, тихо сам с собою я веду беседу (с) :D
...
Рейтинг: 0 / 0
05.02.2004, 12:57
    #32399203
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton
Crip
Вообще-то singleton это вроде несколько другое понятие

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


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

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

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

Пример

Код: 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
07.02.2004, 19:13
    #32401729
vklepko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton
Статических методов в 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
09.02.2004, 09:26
    #32402146
snake
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton
2 funikovyuri
... ну и как тут можно работать, а?

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

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

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

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


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