Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Patrones en OOP, Diapositivas de Programación Java

Patrones que se repiten a la hora de programar y como implementarlos

Tipo: Diapositivas

2018/2019

Subido el 03/12/2019

david-santos-bsh
david-santos-bsh 🇪🇸

9 documentos

1 / 44

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c

Vista previa parcial del texto

¡Descarga Patrones en OOP y más Diapositivas en PDF de Programación Java solo en Docsity!

Projecte de Programació

Patrones de Diseño en Java

Etapa de disseny a l’assignatura IES

Llenguage de Especificació Contractes en UML i Domain Arquitectura (vista lògica) en UML Aplicació tres capes + patró Domain Model Aplicació patrons de disseny Repositori patrons de disseny Identificació Adaptació Etapa de disseny Canviabilitat Eficiència Portabilitat Reusabilitat Base de dades

Patrones de Diseño

El catálogo de patrones es enorme y varían en

granularidad y nivel de abstracción. Según su

propósito , se pueden clasificar en:

  • Patrones creadores (creational): conciernen al

proceso de creación de objetos

  • Patrones estructurales (structural): tratan con la

composición de clases u objetos

  • Patrones de comportamiento (behavioral):

caracterizan la forma en que objetos o clases

interactúan y distribuyen la responsabilidad

Patrón Singleton

Creational Pattern

Propósito : Asegurarse de que una clase tiene sólo

una instancia, y proporcionar un punto de acceso

global a ésta

Solución : Hacer a la propia clase responsable de

registrar su instancia única. La clase intercepta

peticiones para crear nuevas instancias y proporciona

una forma de acceder a la instancia en cuestión

Patrón Singleton

Implementación 2

package singleton.demo; public class Singleton { // inicialización “eager” private static Singleton instance = new Singleton(); // la constructora es privada para prohibir la libre instanciación private Singleton() {…} public static Singleton getInstance() { return instance; } }

Patrón Singleton

Implementación 3

package singleton.demo; public class Singleton { // la inicialización podría suprimirse (default) private static Singleton instance = null; private Singleton() {…} private static class SingletonHelper { private static final Singleton instance = new Singleton(); } public static Singleton getInstance() { return SingletonHelper.instance; } }

Patrón Decorador

Ejemplo : Una interfaz gráfica debería permitir añadir propiedades (p.ej. bordes) y/o comportamientos (p.ej. scrolling) a cada uno de sus componentes de forma flexible. Solución : Envolver el componente en otro objeto que añada la propiedad/comportamiento, el Decorador.

  • El decorador se ajusta a la interficie del componente -> la presencia del decorador es transparente a los clientes del componente
  • El decorador reenvía las peticiones al componente (eventualmente ejecutando acciones adicionales antes o después)
  • La transparencia permite anidar decoradores recursivamente -> número ilimitado de responsabilidades añadidas

Patrón Decorador

  • Componente : define la interficie de aquellos objetos a los que se puede

añadir responsabilidades de forma dinámica

  • ComponenteConcreto : define un objeto al que se le pueden asociar

responsabilidades adicionales

Patrón Decorador

Ejemplo : Una interfaz gráfica quiere permitir añadir propiedades (bordes)

y comportamientos (scrolling) a sus ventanas de texto de forma flexible

Patrón Decorador

Implementación

// Si sólo tuviera operaciones diferidas, podría ser una interface abstract class VisualComponent { public abstract void Draw(); public abstract void Resize(); … } // TextComponent: closed for modification, open for extension class TextComponent extends VisualComponent { public void Draw() {…} public void Resize() {…} … }

Patrón Decorador

Implementación

class BorderDecorator extends Decorator { private int width; public BorderDecorator(VisualComponent c, int borderWidth) { super(c); width = borderWidth; } public void Draw() { super.Draw(); DrawBorder(width); } private void DrawBorder (int w) {…} … } Idem clase ScrollDecorator…

Patrón Decorador

Implementación

Un ejemplo de uso: class DecoratorPatternEx { public static void main (String[] args) { TextComponent c = new TextComponent(); // “decoro” la ventana con un scroll ScrollDecorator sd = new ScrollDecorator(c); sd.Draw(); // “decoro” la ventana con scroll con un borde BorderDecorator bd = new BorderDecorator(sd, 5); bd.Draw(); // asumiendo que la clase Window tiene una operación SetContents // para poner un VisualComponent en un objeto Window window = new Window(); window.SetContents(bd); … } }

Patrón Decorador - Ejercicio

Patrón Decorador - Ejercicio