Ver Mensaje Individual
  #6  
Antiguo 24-03-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No exactamente. Como lo propones tendrías que estar verificando cuál usar en cada método de TSuperPdf.

Lo que te propone juanmdq (excelente idea por cierto), es más del estilo:

Código Delphi [-]
type
  TSuperPdf = class
  end;

  TPdf60 = class(TSuperPdf)
  private
    Pdf: TPdf;
  end;

  TPdf70 = class(TSuperPdf)
  private
    Pdf: TAcroPdf;
  end;

La clase TSuperPdf sólo definiría los métodos comunes o similares pero no los implementa (virtual; abstract)

Las clases TPdf60 y TPdf70 redefinen esos métodos y los implementan usando los métodos de su respectiva componente privada Pdf.

Al comienzo de la aplicación determinas qué instancia construir y la colocas en una variable de tipo TSuperPdf:

Código Delphi [-]
if Version6 then
  SuperPdf := TPdf60.Create
else if Version7 then
  SuperPdf := TPdf70.Create
else
  raise Exception.Create('Versión no soportada');

Así, además, estarás listo para cuando salga la versión 8: sólo tendrásque crear la correspondiente claseTPdf80 descendiente de TSuperPdf y el resto del código en tu aplicación no cambiará.

// Saludos
Responder Con Cita