{"id":2067,"date":"2023-12-01T15:57:59","date_gmt":"2023-12-01T18:57:59","guid":{"rendered":"https:\/\/stackcodelab.com\/blog\/?p=2067"},"modified":"2023-12-01T15:58:04","modified_gmt":"2023-12-01T18:58:04","slug":"capitulo-13-patrones-de-diseno-en-java","status":"publish","type":"post","link":"https:\/\/stackcodelab.com\/blog\/capitulo-13-patrones-de-diseno-en-java\/","title":{"rendered":"Cap\u00edtulo 13: Patrones de Dise\u00f1o en Java"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Los patrones de dise\u00f1o son soluciones probadas y comunes a problemas de dise\u00f1o de software. Ayudan a escribir c\u00f3digo m\u00e1s eficiente, mantenible y escalable. En este cap\u00edtulo, exploraremos varios patrones de dise\u00f1o en Java junto con ejemplos y ejercicios para reforzar la comprensi\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a>13.1 Patr\u00f3n Singleton<\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El patr\u00f3n Singleton garantiza que una clase tenga una \u00fanica instancia y proporciona un punto de acceso global a esa instancia. Es \u00fatil en situaciones donde una \u00fanica instancia debe coordinar acciones en todo el sistema.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejemplo:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class Singleton {\r\n    private static Singleton instance;\r\n    \r\n    private Singleton() {\r\n        \/\/ Constructor privado para evitar instancias m\u00faltiples\r\n    }\r\n    \r\n    public static Singleton getInstance() {\r\n        if (instance == null) {\r\n            instance = new Singleton();\r\n        }\r\n        return instance;\r\n    }\r\n}\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejercicio:<\/strong>&nbsp;Implementa un Singleton para manejar la configuraci\u00f3n de una aplicaci\u00f3n y aseg\u00farate de que solo haya una instancia en el sistema.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a>13.2 Patr\u00f3n Factory Method<\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El patr\u00f3n Factory Method define una interfaz para crear objetos, pero permite que las subclases alteren el tipo de objetos que se crear\u00e1n. Es \u00fatil cuando una clase no puede anticipar la clase de objetos que debe crear.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejemplo:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>interface Producto {\r\n    void operacion();\r\n}\r\n\r\nclass ProductoConcretoA implements Producto {\r\n    public void operacion() {\r\n        System.out.println(\"Operaci\u00f3n en Producto A\");\r\n    }\r\n}\r\n\r\nclass ProductoConcretoB implements Producto {\r\n    public void operaci\u00f3n() {\r\n        System.out.println(\"Operaci\u00f3n en Producto B\");\r\n    }\r\n}\r\n\r\ninterface Fabrica {\r\n    Producto crearProducto();\r\n}\r\n\r\nclass FabricaConcretaA implements Fabrica {\r\n    public Producto crearProducto() {\r\n        return new ProductoConcretoA();\r\n    }\r\n}\r\n\r\nclass FabricaConcretaB implements Fabrica {\r\n    public Producto crearProducto() {\r\n        return new ProductoConcretoB();\r\n    }\r\n}\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejercicio:<\/strong>&nbsp;Crea un conjunto de clases e interfaces que implementen el patr\u00f3n Factory Method para crear diferentes tipos de veh\u00edculos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a>13.3 Patr\u00f3n Observer<\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El patr\u00f3n Observer define una relaci\u00f3n de uno a muchos entre objetos. Cuando el estado de un objeto cambia, todos los objetos que dependen de \u00e9l son notificados y actualizados autom\u00e1ticamente. Este patr\u00f3n se usa para implementar distribuci\u00f3n de eventos.<strong><br><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejemplo:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import java.util.ArrayList;\r\nimport java.util.List;\r\n\r\ninterface Observador {\r\n    void actualizar(String mensaje);\r\n}\r\n\r\nclass Sujeto {\r\n    private List&lt;Observador> observadores = new ArrayList&lt;>();\r\n\r\n    public void registrarObservador(Observador observador) {\r\n        observadores.add(observador);\r\n    }\r\n\r\n    public void eliminarObservador(Observador observador) {\r\n        observadores.remove(observador);\r\n    }\r\n\r\n    public void notificarObservadores(String mensaje) {\r\n        for (Observador observador : observadores) {\r\n            observador.actualizar(mensaje);\r\n        }\r\n    }\r\n}\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejercicio:<\/strong>&nbsp;Crea un sistema de notificaci\u00f3n que utiliza el patr\u00f3n Observer. Los observadores pueden ser suscritos para recibir notificaciones cuando ocurren eventos espec\u00edficos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a>13.4 Patr\u00f3n Strategy<\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El patr\u00f3n Strategy define una familia de algoritmos, los encapsula y los hace intercambiables. Esto permite que el algoritmo var\u00ede independientemente de los clientes que lo utilizan.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejemplo:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>interface Estrategia {\r\n    int realizarOperaci\u00f3n(int a, int b);\r\n}\r\n\r\nclass Suma implements Estrategia {\r\n    public int realizarOperaci\u00f3n(int a, int b) {\r\n        return a + b;\r\n    }\r\n}\r\n\r\nclass Resta implements Estrategia {\r\n    public int realizarOperaci\u00f3n(int a, int b) {\r\n        return a - b;\r\n    }\r\n}\r\n\r\nclass Calculadora {\r\n    private Estrategia estrategia;\r\n\r\n    public Calculadora(Estrategia estrategia) {\r\n        this.estrategia = estrategia;\r\n    }\r\n\r\n    public int ejecutarOperaci\u00f3n(int a, int b) {\r\n        return estrategia.realizarOperaci\u00f3n(a, b);\r\n    }\r\n}\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejercicio:<\/strong>&nbsp;Crea un programa que utiliza el patr\u00f3n Strategy para realizar diferentes tipos de c\u00e1lculos matem\u00e1ticos, como suma, resta, multiplicaci\u00f3n y divisi\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Este cap\u00edtulo te proporciona una base s\u00f3lida para comprender y aplicar patrones de dise\u00f1o en tus proyectos de desarrollo de software en Java. Estos patrones te ayudar\u00e1n a escribir c\u00f3digo m\u00e1s eficiente y mantenible. Practica la implementaci\u00f3n de estos patrones para fortalecer tus habilidades de programaci\u00f3n en Java.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Los patrones de dise\u00f1o son soluciones probadas y comunes a problemas de dise\u00f1o de software. Ayudan a escribir c\u00f3digo m\u00e1s eficiente, mantenible y escalable. En este cap\u00edtulo, exploraremos varios patrones de dise\u00f1o en Java junto con ejemplos y ejercicios para reforzar la comprensi\u00f3n. 13.1 Patr\u00f3n Singleton El patr\u00f3n Singleton garantiza que una clase tenga una [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2068,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[40],"tags":[47],"class_list":["post-2067","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java-y-otras-hierbas","tag-patrones-de-diseno-en-java"],"uagb_featured_image_src":{"full":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/12\/Patrones-de-Diseno-en-Java.jpg",1000,666,false],"thumbnail":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/12\/Patrones-de-Diseno-en-Java-150x150.jpg",150,150,true],"medium":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/12\/Patrones-de-Diseno-en-Java-300x200.jpg",300,200,true],"medium_large":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/12\/Patrones-de-Diseno-en-Java-768x511.jpg",768,511,true],"large":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/12\/Patrones-de-Diseno-en-Java.jpg",1000,666,false],"1536x1536":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/12\/Patrones-de-Diseno-en-Java.jpg",1000,666,false],"2048x2048":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/12\/Patrones-de-Diseno-en-Java.jpg",1000,666,false]},"uagb_author_info":{"display_name":"arquitecto","author_link":"https:\/\/stackcodelab.com\/blog\/author\/arquitecto\/"},"uagb_comment_info":0,"uagb_excerpt":"Los patrones de dise\u00f1o son soluciones probadas y comunes a problemas de dise\u00f1o de software. Ayudan a escribir c\u00f3digo m\u00e1s eficiente, mantenible y escalable. En este cap\u00edtulo, exploraremos varios patrones de dise\u00f1o en Java junto con ejemplos y ejercicios para reforzar la comprensi\u00f3n. 13.1 Patr\u00f3n Singleton El patr\u00f3n Singleton garantiza que una clase tenga una&hellip;","_links":{"self":[{"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/posts\/2067","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/comments?post=2067"}],"version-history":[{"count":1,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/posts\/2067\/revisions"}],"predecessor-version":[{"id":2069,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/posts\/2067\/revisions\/2069"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/media\/2068"}],"wp:attachment":[{"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/media?parent=2067"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/categories?post=2067"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/tags?post=2067"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}