2012-07-29 15 views
7

Estaba pasando por el patrón de diseño de java y obtuve algunas dudas/preguntas modelo de diseño del prototipo. Primero déjame decir lo que he entendido. El patrón de diseño del prototipo se utiliza para la creación de objetos es costoso en términos de memoria o recursos. Entonces, en ese caso usamos el clon de ese objeto que ya está disponible. Entonces, ¿cuál es la diferencia entre crear un nuevo objeto y clonar()? ¿Dónde se almacena el objeto en la memoria?diseño de prototipo java creación de objeto de patrón

+0

esto podría ser útil para usted http://stackoverflow.com/questions/663079/does-cloning-provide-a-performance-improvement-over-constructors-factory-methods –

Respuesta

3

El patrón de diseño de prototipo ofrece ahorros en los costos de dos tipos: ahorro de tiempo y ahorro de espacio.

Ahorro de tiempo en situaciones cuando la creación de un objeto requiere un acceso costoso a la información auxiliar, por ejemplo, solicitud de datos de configuración de un archivo, una base de datos o una red. Por ejemplo, si está creando muchas páginas a partir de una plantilla almacenada en un servidor web, es más económico leer la plantilla una vez y clonarla para obtener el punto de partida de cada página nueva, en lugar de consultar el servidor web por separado. cada pagina.

El ahorro de memoria proviene de la reutilización de objetos inmutables: si el original contiene muchas cadenas, la creación de una nueva instancia necesitaría crear cadenas inmutables completamente nuevas o tratar el enhebrado manual de cadenas. El uso del patrón de prototipo evita con gracia este problema al permitir que el clon comparta las partes inmutables de la plantilla.

4

El método Java clone() solo crea un nuevo objeto y copia los valores de las variables miembro en él. En general, no es ni más ni menos costoso que crear un nuevo objeto. La única vez que clone() podría ser más barato que crear un objeto con new sería cuando el constructor de un objeto hace algo costoso: por ejemplo, ¿qué ocurre si el constructor toma los argumentos y los utiliza como parte de una consulta de base de datos? En ese caso, usar clone() sería más barato, ya que la costosa operación de consulta no ocurriría.

Sin embargo, existen otros motivos para usar este patrón de diseño: principalmente, cuando los objetos necesitan una configuración complicada antes del uso que no se puede realizar de forma conveniente en un constructor. Imagine que un objeto tiene 20 propiedades que deben establecerse. Si los configuras con parámetros de constructor, ese constructor sería horriblemente feo. ¡Imagina un constructor con 20 parámetros! En su lugar, podría construir un objeto con quizás ningún parámetro, establecer los 20 valores utilizando métodos de mutador, luego clone() el objeto para hacer copias ya preparadas cuando sea necesario. clone() no necesita ningún parámetro, por lo que obviamente es menos feo. Si necesita copias múltiples de varias versiones diferentes de este objeto, entonces el patrón prototipo se vuelve atractivo.

Cuestiones relacionadas