Fábrica de patrones para las operaciones del menú


En este artículo te presione el patrón de Fábrica en servicio para las operaciones del menú.
Se Le está Servido?
En este artículo vamos a echar un breve descanso de los rigores de la aplicación de objetos de negocio para lidiar con algo que casi cada aplicación requiere: un menú. No es un menú en el sentido de una TMainMenu derivados, sino más bien una especie de front-end, que muestra un número de opciones disponibles y requiere ser seleccionado por el usuario. Un ejemplo típico sería una lista de opciones que se presentan para el usuario cuando se inicia una aplicación: son necesarios para seleccionar si desea iniciar el principal de la aplicación, o tal vez el paquete de información, servicios de utilidad general o administrador de sistemas. Estas opciones normalmente se presenta al usuario en bastante crudo maneras, tal vez un pequeño formulario con un número de botones, cada uno con un título que describa la aplicación a ejecutar, o un cuadro de lista con un número de entradas. Mayoría de las veces estos menú de tipo de formas son codificados e intrínsecamente 'saber' cómo lanzar la opción seleccionada. Tales soluciones comparten dos propiedades: son inflexibles y poco atractivo. Este mes vamos a utilizar el patrón de Fábrica (y juiciosa elección de la componente visual) para ofrecer una mejor solución.
Ir a trabajar
Un patrón de fábrica debe ser utilizado cuando 'una clase no puede anticipar la clase de objetos a los que se debe crear'. Esencialmente un objeto de cliente utiliza las propiedades y métodos de un resumen antepasado objeto, mientras que en realidad es la manipulación de hormigón descendientes que han sido suministrados por la fábrica de clase. La clave del diseño es que el cliente no necesita saber los detalles específicos acerca de los objetos reales es la manipulación, a excepción de aquellos que comparten su ancestro común. De esta forma, desacopla clases en tiempo de compilación. Con respecto a la pantalla del menú en Delphi, esto significa que el menú de formulario no es necesario utilizar las unidades que contienen los formularios que se mostrará cuando un particular elemento de menú seleccionado. Esta elegancia nos ofrece la posibilidad de colocar estas formas dentro de la DLL, que se cargan dinámicamente cuando el uso se selecciona la opción de menú correspondiente. Esto tiene las ventajas obvias de consumo de memoria (sólo en la opción de menú activa seleccionada por el usuario en tiempo de ejecución consume memoria), y que la aplicación puede ser extendido por el simple suministro de una nueva DLL - la pantalla del menú puede simplemente detectar su presencia y agregarlo a la lista que se presenta al usuario.
Inicialmente, vamos a considerar el caso de un vinculado estáticamente conjunto de las operaciones del menú es decir, todas las operaciones disponibles serán compilados dentro de la aplicación. Nota, sin embargo, que esto es simplemente una comodidad de la pantalla de menú, aún no tiene ningún conocimiento explícito de las operaciones, o la forma en que están vinculados a la aplicación. En su lugar, cada operación de menú registrará a sí mismo con la fábrica y el menú formulario de interrogar a la fábrica de las entradas disponibles. El menú es libre de presentar estas entradas en la forma que crea conveniente. Cuando el usuario selecciona una entrada de menú, la fábrica se solicita a la construcción de un concreto ejemplo de el tipo particular y esto se muestra a continuación.
La fábrica en sí tiene una interfaz muy simple. Tiene un método llamado Registro que se utiliza el menú de entradas para notificar a la fábrica de su existencia (yo he usado Registrarse como imita a la nomenclatura utilizada por otras fábricas dentro de Delphi en sí, tales como el registro de los componentes de la muestra en la paleta de componentes). Además, la fábrica tiene dos propiedades que vamos a otra clase de observar el número de los miembros dentro de la fábrica, y proporciona acceso a cada uno de ellos. Listado 1 muestra una implementación completa de esta fábrica.
ahora Tenemos que añadir algunas operaciones de menú a la fábrica. Esto es muy simple: crear nuevas formas, agregar el MenuActionFactory unidad a la cláusula uses en la sección de implementación, y agregue el siguiente código al pie de cada formulario de unidad:
inicialización
& nbsp & nbsp MenuActions.Registro (TMyNewForm)
La TMyNewForm de referencia, debe ser reemplazado con el nombre de la clase de la forma particular de la unidad en cuestión. Ahora que nuestra fábrica de clase ha sido inicializada, podemos dirigir nuestra atención a cómo se puede aplicar.
menús a la carta
Como ya se observó, muchos 'obvio' formas de la necesidad de que el usuario seleccione una de las opciones de muchos son visualmente poco atractivo. Una lista vertical de los distintos botones (con mucho subtítulos) es particularmente atractivo, pero, sorprendentemente, solución común. Considerar la forma en que Windows se resuelve una interfaz de usuario similar problema: el Panel de Control es un buen ejemplo de una lista de operaciones distintas. Esto no es más que una vista de lista, sino un conjunto de iconos bien diseñados y diseño consistente va un largo camino para proporcionar una interfaz atractiva. A esto se añade la capacidad incorporada de una vista de lista para reordenar los iconos como se cambia el tamaño, y para mostrar los iconos de diferentes tamaños, o en un informe descriptivo de vista, y que tiene casi un ideal de la herramienta de selección.
Para crear una nueva pantalla de menú, la caída de la vista de lista en el formulario en blanco y alinear la ti para el área de cliente. Me gusta pasar un TCoolBar alinea con la parte superior en el formulario y agregar un par de planos de botones (con el uso de imágenes copiadas desde el Explorador) para permitir al usuario cambiar el ViewStyle de la vista de lista. Para hacer la lista de la vista de auto-organizar los iconos, agregue el código siguiente a la FormResize evento:
lvwForms.Organizar (arDefault)
Finalmente, debemos agregar una lista de imágenes para el formulario y enlace a la vista de la lista de LargeImages de la propiedad.
ahora Tenemos que mostrar el menú de opciones disponibles dentro de la fábrica dentro de la vista de lista. Esto implica el ciclismo a través de la registrada en el menú de opciones y la creación de un nuevo elemento de la lista para cada uno. Cada elemento de la lista será necesario asignar un índice de la imagen de su icono, y una leyenda - estos serán tomados directamente del mismo nombre propiedades de la registrada en el formulario. Es posible añadir más información a los elementos de menú de la instancia cuando la lista está en vsReport modo puede ser una buena idea añadir una larga descripción de la muestra como una segunda columna, de manera que los usuarios novatos pueden tener una mejor comprensión de lo que cada acción. Un buen ejemplo de esto puede ser visto en la Consola de Administración de Windows 2000.
La clave de este proceso es que el menú de la forma de presentación de sí mismo tiene que usar sólo la MenuActionFactory unidad de sí mismo y ninguno de la opción de menú específicos de las formas. Estas especializaciones son completamente oculto en el interior de la fábrica como su nombre lo indica va a crear una clase concreta del tipo correcto, sin que el cliente siempre tenga que conocer los detalles exactos.

Listado 2 muestra el código necesario para rellenar la vista de lista. Tenga en cuenta que a medida que circula a través de cada uno de los registrados en el menú acción, la fábrica crea la clase requerida. El menú, a continuación, crea un nuevo elemento de la lista con los detalles pertinentes antes de destruir el objeto. Tenga en cuenta que para que esto funcione correctamente los constructores en el registro de clases debe ser virtual esto ya es cierto para los componentes visuales tales como formularios (porque Delphi utiliza una fábrica para crear ellos a medida que se transmitan .DFM archivos y recursos), pero para clases personalizadas será necesario introducir una virtual constructor en su jerarquía de clases.
Cuando este formulario es presentado al usuario y un elemento está seleccionado haciendo doble clic, podemos pedir a nuestra fábrica para crear la forma específica requerida, que se pueden visualizar. No hay absolutamente ninguna restricción acerca de lo que estas formas pueden hacer, pero la elegancia de la fábrica modelo es que el cliente de la fábrica puede permanecer ignorante de los detalles. Más opciones de menú pueden ser añadidos a un sistema evolutivo, simplemente mediante la creación de una nueva forma y registrarlos con la fábrica - que de inmediato se añadirá en el menú del sistema la próxima vez que se ejecute la aplicación. Esta falta de acoplamiento entre los elementos del sistema facilita enormemente el mantenimiento de aplicaciones para proyectos grandes - simplemente por el registro de clases con una fábrica, el desarrollador sabe que en cualquier parte de la aplicación que tiene interés en ese tipo de cosas va a ser actualizado.
es fácil ver cómo este menú solución es, en sí mismo, genérico y puede ser aplicado a una serie de aplicaciones o incluso de la misma aplicación en un número de veces. En muchas de mis aplicaciones tengo un menú principal que muestra todos los principales módulos dentro de la suite, dos de los módulos de presentación de informes y servicios de utilidad general. Cuando estos módulos son seleccionados que a su vez muestra un submenú de los informes y las utilidades presentes en el sistema, respectivamente. Todos estos menú de formas de compartir el código a través de la forma visual de la herencia, que sólo difieren en la fábrica en la que se utilice (hay diferentes fábricas de módulos, los informes y los servicios públicos). La forma visual ancestro común a los tres puede ser muy funcional, agregar dinámicamente TMenuItem entradas de la aplicación para cada opción de menú. La palabra clave aquí es la reutilización de código a través de un acoplamiento flexible - una de las principales ventajas de objeto de principios orientados. En comparación, el enfoque tradicional de la cerca del acoplamiento de la única menú de formas específicas para sus acciones de menú se ve inflexible y rígida.
el Último artículo del problema
artículo anterior, vimos cómo un objeto delegado se podría prestar a persistir objeto de negocio de la información, y se preguntó, en donde la fuerza de esta disposición? La respuesta obvia a la pregunta es crear la gestión de datos de objeto en el constructor del objeto de negocio:
constructor TMyPDObject.Crear
begin
& nbsp & nbsp heredado
& nbsp & nbsp // Pasar información necesaria para el constructor
& nbsp & nbsp DMObject := TMyDMObject.Crear
fin
El problema con este enfoque es que cada objeto de negocio que creamos tiene la sobrecarga de la construcción de una gestión de datos de objeto. Dependiendo de su base de datos, esta puede ser una operación costosa, y por lo tanto extremadamente indeseable, especialmente cuando se considera que muchos de los objetos de negocio se construye y se destruye cuando se ejecuta la aplicación. Mediante el examen de la interfaz de la clase, se puede observar que la Carga y Guardar métodos son apátridas - todo el trabajo se realiza en una sola llamada al método. Por lo tanto, siempre que la solicitud no requiere de múltiples subprocesos de la base de datos de la actividad en distintas partes del dominio del problema, una sola de gestión de datos de objeto puede ser compartida entre las muchas instancias de los objetos de negocio que puede manejar. Aún mejor, esta gestión de datos de objeto puede ser creado al inicio de la aplicación el tiempo (o la primera vez es necesario). Estos datos de la gestión de los objetos pueden ser creados como privada global de los objetos dentro de la sección de implementación del dominio del problema, o, más elegante, una fábrica puede ser utilizado para asociar los datos de gestión de clases con el objeto de negocio de clases y crear de una manera adecuada.
((( Listado 1 - Una implementación de una fábrica para las operaciones del menú )))
unidad de MenuActionFactory
interfaz
usos
& nbsp & nbsp Clases, Las formas
tipo
& nbsp & nbsp TMenuAction = TForm
& nbsp & nbsp TMenuActionClass = clase de TMenuAction
& nbsp & nbsp TMenuActionFactory = clase
& nbsp & nbsp privada
& nbsp & nbsp & nbsp & nbsp MenuActionList: TList
& nbsp & nbsp & nbsp & nbsp función GetCount: Integer
& nbsp & nbsp & nbsp & nbsp función GetMenuAction (Index: Integer): TMenuAction
& nbsp & nbsp pública
& nbsp & nbsp & nbsp & nbsp constructor Create
& nbsp & nbsp & nbsp & nbsp destructor Destruir reemplazar
& nbsp & nbsp & nbsp & nbsp procedimiento de Registro (MenuActionClass: TMenuActionClass)
& nbsp & nbsp & nbsp & nbsp propiedad Count: Entero leer GetCount
& nbsp & nbsp & nbsp & nbsp propiedad MenuAction[Index: Integer]: TMenuAction leer GetMenuAction predeterminado
& nbsp & nbsp final
var
& nbsp & nbsp MenuActions: TMenuActionFactory
aplicación
constructor TMenuActionFactory.Crear
begin
& nbsp & nbsp heredado
& nbsp & nbsp MenuActionList := TList.Crear
fin
destructor TMenuActionFactory.Destruir
begin
& nbsp & nbsp MenuActionList.Libre
& nbsp & nbsp heredado
fin
función TMenuActionFactory.GetCount: Integer
begin
& nbsp & nbsp Resultado := MenuActionList.Cuenta
fin
función TMenuActionFactory.GetMenuAction (Index: Integer): TMenuAction
begin
& nbsp & nbsp Assert ((Index >= 0) y (Índice < Count), ' Índice fuera de rango.')
& nbsp & nbsp // Construir y devolver la entrada seleccionada
& nbsp & nbsp Resultado := TMenuActionClass (MenuActionList[Index]).Create (nil)
fin
procedimiento TMenuActionFactory.Registro (MenuActionClass: TMenuActionClass)
begin
& nbsp & nbsp MenuActionList.Agregar (MenuActionClass)
fin
inicialización
& nbsp & nbsp MenuActions := TMenuActionFactory.Crear
la finalización
& nbsp & nbsp MenuActions.Libre
final.
((( Fin del Listado 1 )))
((( Listado 2 - el Uso de una fábrica para rellenar una vista de lista)))
procedimiento PopulateListView (lvwMenu: TlistView de Fábrica: TMenuActionFactory)
var
& nbsp & nbsp Index: Integer
& nbsp & nbsp MenuAction: TForm
begin
& nbsp & nbsp Índice := 0 a la Fábrica.Count - 1 do begin
& nbsp & nbsp & nbsp & nbsp MenuAction := de Fábrica.MenuAction[Índice]
& nbsp & nbsp & nbsp & nbsp con lvwMenu.Elementos.Agregar empiezan
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Caption := MenuAction.Título
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp ImageIndex := lvwMenu.LargeImages.AddIcon (MenuAction.Icono)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Puntos.Agregar (MenuAction.Sugerencia)
& nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp final
fin
((( Fin del Listado 2 )))
el Siguiente en la serie









Fabrica de patrones para las operaciones del menu


Fabrica de patrones para las operaciones del menu : Multi-millones de consejos para hacer su vida mas facil.


En este articulo te presione el patron de Fabrica en servicio para las operaciones del menu.
Se Le esta Servido?
En este articulo vamos a echar un breve descanso de los rigores de la aplicacion de objetos de negocio para lidiar con algo que casi cada aplicacion requiere: un menu. No es un menu en el sentido de una TMainMenu derivados, sino mas bien una especie de front-end, que muestra un numero de opciones disponibles y requiere ser seleccionado por el usuario. Un ejemplo tipico seria una lista de opciones que se presentan para el usuario cuando se inicia una aplicacion: son necesarios para seleccionar si desea iniciar el principal de la aplicacion, o tal vez el paquete de informacion, servicios de utilidad general o administrador de sistemas. Estas opciones normalmente se presenta al usuario en bastante crudo maneras, tal vez un pequeño formulario con un numero de botones, cada uno con un titulo que describa la aplicacion a ejecutar, o un cuadro de lista con un numero de entradas. Mayoria de las veces estos menu de tipo de formas son codificados e intrinsecamente 'saber' como lanzar la opcion seleccionada. Tales soluciones comparten dos propiedades: son inflexibles y poco atractivo. Este mes vamos a utilizar el patron de Fabrica (y juiciosa eleccion de la componente visual) para ofrecer una mejor solucion.
Ir a trabajar
Un patron de fabrica debe ser utilizado cuando 'una clase no puede anticipar la clase de objetos a los que se debe crear'. Esencialmente un objeto de cliente utiliza las propiedades y metodos de un resumen antepasado objeto, mientras que en realidad es la manipulacion de hormigon descendientes que han sido suministrados por la fabrica de clase. La clave del diseño es que el cliente no necesita saber los detalles especificos acerca de los objetos reales es la manipulacion, a excepcion de aquellos que comparten su ancestro comun. De esta forma, desacopla clases en tiempo de compilacion. Con respecto a la pantalla del menu en Delphi, esto significa que el menu de formulario no es necesario utilizar las unidades que contienen los formularios que se mostrara cuando un particular elemento de menu seleccionado. Esta elegancia nos ofrece la posibilidad de colocar estas formas dentro de la DLL, que se cargan dinamicamente cuando el uso se selecciona la opcion de menu correspondiente. Esto tiene las ventajas obvias de consumo de memoria (solo en la opcion de menu activa seleccionada por el usuario en tiempo de ejecucion consume memoria), y que la aplicacion puede ser extendido por el simple suministro de una nueva DLL - la pantalla del menu puede simplemente detectar su presencia y agregarlo a la lista que se presenta al usuario.
Inicialmente, vamos a considerar el caso de un vinculado estaticamente conjunto de las operaciones del menu es decir, todas las operaciones disponibles seran compilados dentro de la aplicacion. Nota, sin embargo, que esto es simplemente una comodidad de la pantalla de menu, aun no tiene ningun conocimiento explicito de las operaciones, o la forma en que estan vinculados a la aplicacion. En su lugar, cada operacion de menu registrara a si mismo con la fabrica y el menu formulario de interrogar a la fabrica de las entradas disponibles. El menu es libre de presentar estas entradas en la forma que crea conveniente. Cuando el usuario selecciona una entrada de menu, la fabrica se solicita a la construccion de un concreto ejemplo de el tipo particular y esto se muestra a continuacion.
La fabrica en si tiene una interfaz muy simple. Tiene un metodo llamado Registro que se utiliza el menu de entradas para notificar a la fabrica de su existencia (yo he usado Registrarse como imita a la nomenclatura utilizada por otras fabricas dentro de Delphi en si, tales como el registro de los componentes de la muestra en la paleta de componentes). Ademas, la fabrica tiene dos propiedades que vamos a otra clase de observar el numero de los miembros dentro de la fabrica, y proporciona acceso a cada uno de ellos. Listado 1 muestra una implementacion completa de esta fabrica.
ahora Tenemos que añadir algunas operaciones de menu a la fabrica. Esto es muy simple: crear nuevas formas, agregar el MenuActionFactory unidad a la clausula uses en la seccion de implementacion, y agregue el siguiente codigo al pie de cada formulario de unidad:
inicializacion
& nbsp & nbsp MenuActions.Registro (TMyNewForm)
La TMyNewForm de referencia, debe ser reemplazado con el nombre de la clase de la forma particular de la unidad en cuestion. Ahora que nuestra fabrica de clase ha sido inicializada, podemos dirigir nuestra atencion a como se puede aplicar.
menus a la carta
Como ya se observo, muchos 'obvio' formas de la necesidad de que el usuario seleccione una de las opciones de muchos son visualmente poco atractivo. Una lista vertical de los distintos botones (con mucho subtitulos) es particularmente atractivo, pero, sorprendentemente, solucion comun. Considerar la forma en que Windows se resuelve una interfaz de usuario similar problema: el Panel de Control es un buen ejemplo de una lista de operaciones distintas. Esto no es mas que una vista de lista, sino un conjunto de iconos bien diseñados y diseño consistente va un largo camino para proporcionar una interfaz atractiva. A esto se añade la capacidad incorporada de una vista de lista para reordenar los iconos como se cambia el tamaño, y para mostrar los iconos de diferentes tamaños, o en un informe descriptivo de vista, y que tiene casi un ideal de la herramienta de seleccion.
Para crear una nueva pantalla de menu, la caida de la vista de lista en el formulario en blanco y alinear la ti para el area de cliente. Me gusta pasar un TCoolBar alinea con la parte superior en el formulario y agregar un par de planos de botones (con el uso de imagenes copiadas desde el Explorador) para permitir al usuario cambiar el ViewStyle de la vista de lista. Para hacer la lista de la vista de auto-organizar los iconos, agregue el codigo siguiente a la FormResize evento:
lvwForms.Organizar (arDefault)
Finalmente, debemos agregar una lista de imagenes para el formulario y enlace a la vista de la lista de LargeImages de la propiedad.
ahora Tenemos que mostrar el menu de opciones disponibles dentro de la fabrica dentro de la vista de lista. Esto implica el ciclismo a traves de la registrada en el menu de opciones y la creacion de un nuevo elemento de la lista para cada uno. Cada elemento de la lista sera necesario asignar un indice de la imagen de su icono, y una leyenda - estos seran tomados directamente del mismo nombre propiedades de la registrada en el formulario. Es posible añadir mas informacion a los elementos de menu de la instancia cuando la lista esta en vsReport modo puede ser una buena idea añadir una larga descripcion de la muestra como una segunda columna, de manera que los usuarios novatos pueden tener una mejor comprension de lo que cada accion. Un buen ejemplo de esto puede ser visto en la Consola de Administracion de Windows 2000.
La clave de este proceso es que el menu de la forma de presentacion de si mismo tiene que usar solo la MenuActionFactory unidad de si mismo y ninguno de la opcion de menu especificos de las formas. Estas especializaciones son completamente oculto en el interior de la fabrica como su nombre lo indica va a crear una clase concreta del tipo correcto, sin que el cliente siempre tenga que conocer los detalles exactos.

Listado 2 muestra el codigo necesario para rellenar la vista de lista. Tenga en cuenta que a medida que circula a traves de cada uno de los registrados en el menu accion, la fabrica crea la clase requerida. El menu, a continuacion, crea un nuevo elemento de la lista con los detalles pertinentes antes de destruir el objeto. Tenga en cuenta que para que esto funcione correctamente los constructores en el registro de clases debe ser virtual esto ya es cierto para los componentes visuales tales como formularios (porque Delphi utiliza una fabrica para crear ellos a medida que se transmitan .DFM archivos y recursos), pero para clases personalizadas sera necesario introducir una virtual constructor en su jerarquia de clases.
Cuando este formulario es presentado al usuario y un elemento esta seleccionado haciendo doble clic, podemos pedir a nuestra fabrica para crear la forma especifica requerida, que se pueden visualizar. No hay absolutamente ninguna restriccion acerca de lo que estas formas pueden hacer, pero la elegancia de la fabrica modelo es que el cliente de la fabrica puede permanecer ignorante de los detalles. Mas opciones de menu pueden ser añadidos a un sistema evolutivo, simplemente mediante la creacion de una nueva forma y registrarlos con la fabrica - que de inmediato se añadira en el menu del sistema la proxima vez que se ejecute la aplicacion. Esta falta de acoplamiento entre los elementos del sistema facilita enormemente el mantenimiento de aplicaciones para proyectos grandes - simplemente por el registro de clases con una fabrica, el desarrollador sabe que en cualquier parte de la aplicacion que tiene interes en ese tipo de cosas va a ser actualizado.
es facil ver como este menu solucion es, en si mismo, generico y puede ser aplicado a una serie de aplicaciones o incluso de la misma aplicacion en un numero de veces. En muchas de mis aplicaciones tengo un menu principal que muestra todos los principales modulos dentro de la suite, dos de los modulos de presentacion de informes y servicios de utilidad general. Cuando estos modulos son seleccionados que a su vez muestra un submenu de los informes y las utilidades presentes en el sistema, respectivamente. Todos estos menu de formas de compartir el codigo a traves de la forma visual de la herencia, que solo difieren en la fabrica en la que se utilice (hay diferentes fabricas de modulos, los informes y los servicios publicos). La forma visual ancestro comun a los tres puede ser muy funcional, agregar dinamicamente TMenuItem entradas de la aplicacion para cada opcion de menu. La palabra clave aqui es la reutilizacion de codigo a traves de un acoplamiento flexible - una de las principales ventajas de objeto de principios orientados. En comparacion, el enfoque tradicional de la cerca del acoplamiento de la unica menu de formas especificas para sus acciones de menu se ve inflexible y rigida.
el Ultimo articulo del problema
articulo anterior, vimos como un objeto delegado se podria prestar a persistir objeto de negocio de la informacion, y se pregunto, en donde la fuerza de esta disposicion? La respuesta obvia a la pregunta es crear la gestion de datos de objeto en el constructor del objeto de negocio:
constructor TMyPDObject.Crear
begin
& nbsp & nbsp heredado
& nbsp & nbsp // Pasar informacion necesaria para el constructor
& nbsp & nbsp DMObject := TMyDMObject.Crear
fin
El problema con este enfoque es que cada objeto de negocio que creamos tiene la sobrecarga de la construccion de una gestion de datos de objeto. Dependiendo de su base de datos, esta puede ser una operacion costosa, y por lo tanto extremadamente indeseable, especialmente cuando se considera que muchos de los objetos de negocio se construye y se destruye cuando se ejecuta la aplicacion. Mediante el examen de la interfaz de la clase, se puede observar que la Carga y Guardar metodos son apatridas - todo el trabajo se realiza en una sola llamada al metodo. Por lo tanto, siempre que la solicitud no requiere de multiples subprocesos de la base de datos de la actividad en distintas partes del dominio del problema, una sola de gestion de datos de objeto puede ser compartida entre las muchas instancias de los objetos de negocio que puede manejar. Aun mejor, esta gestion de datos de objeto puede ser creado al inicio de la aplicacion el tiempo (o la primera vez es necesario). Estos datos de la gestion de los objetos pueden ser creados como privada global de los objetos dentro de la seccion de implementacion del dominio del problema, o, mas elegante, una fabrica puede ser utilizado para asociar los datos de gestion de clases con el objeto de negocio de clases y crear de una manera adecuada.
((( Listado 1 - Una implementacion de una fabrica para las operaciones del menu )))
unidad de MenuActionFactory
interfaz
usos
& nbsp & nbsp Clases, Las formas
tipo
& nbsp & nbsp TMenuAction = TForm
& nbsp & nbsp TMenuActionClass = clase de TMenuAction
& nbsp & nbsp TMenuActionFactory = clase
& nbsp & nbsp privada
& nbsp & nbsp & nbsp & nbsp MenuActionList: TList
& nbsp & nbsp & nbsp & nbsp funcion GetCount: Integer
& nbsp & nbsp & nbsp & nbsp funcion GetMenuAction (Index: Integer): TMenuAction
& nbsp & nbsp publica
& nbsp & nbsp & nbsp & nbsp constructor Create
& nbsp & nbsp & nbsp & nbsp destructor Destruir reemplazar
& nbsp & nbsp & nbsp & nbsp procedimiento de Registro (MenuActionClass: TMenuActionClass)
& nbsp & nbsp & nbsp & nbsp propiedad Count: Entero leer GetCount
& nbsp & nbsp & nbsp & nbsp propiedad MenuAction[Index: Integer]: TMenuAction leer GetMenuAction predeterminado
& nbsp & nbsp final
var
& nbsp & nbsp MenuActions: TMenuActionFactory
aplicacion
constructor TMenuActionFactory.Crear
begin
& nbsp & nbsp heredado
& nbsp & nbsp MenuActionList := TList.Crear
fin
destructor TMenuActionFactory.Destruir
begin
& nbsp & nbsp MenuActionList.Libre
& nbsp & nbsp heredado
fin
funcion TMenuActionFactory.GetCount: Integer
begin
& nbsp & nbsp Resultado := MenuActionList.Cuenta
fin
funcion TMenuActionFactory.GetMenuAction (Index: Integer): TMenuAction
begin
& nbsp & nbsp Assert ((Index >= 0) y (Indice < Count), ' Indice fuera de rango.')
& nbsp & nbsp // Construir y devolver la entrada seleccionada
& nbsp & nbsp Resultado := TMenuActionClass (MenuActionList[Index]).Create (nil)
fin
procedimiento TMenuActionFactory.Registro (MenuActionClass: TMenuActionClass)
begin
& nbsp & nbsp MenuActionList.Agregar (MenuActionClass)
fin
inicializacion
& nbsp & nbsp MenuActions := TMenuActionFactory.Crear
la finalizacion
& nbsp & nbsp MenuActions.Libre
final.
((( Fin del Listado 1 )))
((( Listado 2 - el Uso de una fabrica para rellenar una vista de lista)))
procedimiento PopulateListView (lvwMenu: TlistView de Fabrica: TMenuActionFactory)
var
& nbsp & nbsp Index: Integer
& nbsp & nbsp MenuAction: TForm
begin
& nbsp & nbsp Indice := 0 a la Fabrica.Count - 1 do begin
& nbsp & nbsp & nbsp & nbsp MenuAction := de Fabrica.MenuAction[Indice]
& nbsp & nbsp & nbsp & nbsp con lvwMenu.Elementos.Agregar empiezan
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Caption := MenuAction.Titulo
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp ImageIndex := lvwMenu.LargeImages.AddIcon (MenuAction.Icono)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Puntos.Agregar (MenuAction.Sugerencia)
& nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp final
fin
((( Fin del Listado 2 )))
el Siguiente en la serie


Fábrica de patrones para las operaciones del menú

Fábrica de patrones para las operaciones del menú : Multi-millones de consejos para hacer su vida más fácil.
Recommander aux amis
  • gplus
  • pinterest

Comentario

Dejar un comentario

Clasificación