Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-02-2009
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Poder: 18
noob Va por buen camino
Cita:
Empezado por Delphius Ver Mensaje
Hola noob, está bien. La cuestión es que puedes tener tantas variables como necesites. Pero si te fijas, todas "apuntan" a un mismo objeto. Por tanto, se trata de una única instancia que es referenciada desde diversos puntos.
Pensé que se creaba más de una instancia, no cai en eso.

Muchas gracias a todos por dar estas ricas versiones del patrón Singleton.

Me gusta la opción de acceder al objeto global mediante la función GetInstance y no tener que llamar al método constructor.

Cita:
Empezado por roman
debe haber un objeto de la clase, y éste se crea usando el constructor privado (que basta declarar, no hay nada necesario que implementar).
Dos dudas roman:

1) Cuando en la sección de inicialización de tu unidad Singl haces: Instance := TSingleton.CreateInstance; ¿se crea realmente una instacia? Lo digo porque el método constructor CreateInstance no está implementado.

2) ¿Los métodos GetAuthor y SetAuthor del interfaz ISingleton no deberían de ser virtuales y abstractos para luego ser redefinidos en TSingleton?

Saludos.

Última edición por noob fecha: 17-02-2009 a las 08:57:08.
Responder Con Cita
  #2  
Antiguo 17-02-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por noob
1) Cuando en la sección de inicialización de tu unidad Singl haces: Instance := TSingleton.CreateInstance; ¿se crea realmente una instacia? Lo digo porque el método constructor CreateInstance no está implementado.
De hecho, TObject.Create está también implementado como un método vacío:

Código Delphi [-]
constructor TObject.Create;
begin
end;

No importa qué constructor uses, el mero hecho de serlo hace que el compilador inserte entre el begin y la primera instrucción (si la hay) una llamada a la función _ClassCreate que es la encargada de construir la base del objeto (mediante el método NewInstance).

En otras palabras, el efecto de Create y de CreateInstance es exactamente el mismo: ambos tienen implementación vacía, pero por estar etiquetados como constructores generan la llamada a _ClassCreate.

El único objetivo de introducir CreateInstance es el de invalidar el constructor público para que no pueda usarse externamente.

Cita:
Empezado por noob
2) ¿Los métodos GetAuthor y SetAuthor del interfaz ISingleton no deberían de ser virtuales y abstractos para luego ser redefinidos en TSingleton?
En una interfaz el uso de la directivas virtual y abstract sería redundante, porque, de hecho, todos los métodos de una interfaz son virtuales y abstractos por naturaleza. Virtuales porque su implementación dependerá precisamente de la clase que implemente la interfaz y abstractos porque una interfaz no implementa nada por sí sola.

// Saludos
Responder Con Cita
  #3  
Antiguo 17-02-2009
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Poder: 18
noob Va por buen camino
Cita:
En una interfaz el uso de la directivas virtual y abstract sería redundante, porque, de hecho, todos los métodos de una interfaz son virtuales y abstractos por naturaleza. Virtuales porque su implementación dependerá precisamente de la clase que implemente la interfaz y abstractos porque una interfaz no implementa nada por sí sola.
Pensé que era necesario indicarlo.

Roman más dudas:

1) Siempre me gusta separar cada clase en una unidad distinta, en el caso de la unidad Singl2 ¿lo has hecho en una sola unidad a propósito o lo has hecho así por tenerlo todo más visible a la hora de verlo en el foro?

2) ¿No puedo acceder al método Author por medio de una propiedad tal que así?

Código Delphi [-]
property PropAuthor: String read GetAuthor
                            write SetAuthor;

3) Otra cosa, para usar la instancia desde fuera del interfaz, sería así, ¿verdad?

Código Delphi [-]
ShowMessage(Singl2.GetInstance.GetAuthor);

Siento preguntar cosas que tal vez sean muy básicas.

Gracias.

Última edición por noob fecha: 17-02-2009 a las 20:53:11.
Responder Con Cita
  #4  
Antiguo 20-03-2009
Avatar de Kipow
Kipow Kipow is offline
Miembro
 
Registrado: abr 2006
Ubicación: Guatemala
Posts: 329
Poder: 21
Kipow Va por buen camino
Interesante el tema, me tomo la libertad de contestarte tus ultimas preguntas noob.

1. Singl2 es la version 2 del ejemplo que roman coloco.
2 y 3. La forma de acceder al singleton seria en todo caso asi


Código Delphi [-]
uses 
   Singl2;

begin
     ShowMessage(GetInstance.Author);   
end
.

ya que GetInstance es una funcion que te retorna la clase. talvez un nombre mas practico podria ser

Código Delphi [-]
function Singleton : TSingleton

Que fue como Al Gonzalez lo recomendo en su propia version.

Saludos.
Responder Con Cita
  #5  
Antiguo 20-03-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.449
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por kikin Ver Mensaje
mira la guia de estilo
¿Y a qué viene eso?
Que conste que no estoy en contra de revisarla de vez en cuando¡, pero tanta insistencia... 1 y 2

Perece que se te quedó el teclado "atascado"...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 20-03-2009 a las 16:45:20.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Calentamiento global Crandel La Taberna 0 20-01-2008 16:13:14
Hook global pepelaalfa API de Windows 2 08-12-2005 18:24:27
Variable global jluisx OOP 3 27-10-2005 22:31:22
variable global existe en php ? sarga PHP 1 27-06-2004 17:47:07
Procedimiento global Carlos Arevalo Varios 2 17-11-2003 18:55:00


La franja horaria es GMT +2. Ahora son las 11:13:45.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi