{"id":785,"date":"2010-04-09T13:43:25","date_gmt":"2010-04-09T11:43:25","guid":{"rendered":"http:\/\/www.davidrojas.net\/?p=785"},"modified":"2013-11-23T19:13:08","modified_gmt":"2013-11-23T18:13:08","slug":"screencast-patrones-de-diseno-en-php-factory-pattern","status":"publish","type":"post","link":"https:\/\/www.davidrojas.net\/index.php\/desarrollo-web\/screencast-patrones-de-diseno-en-php-factory-pattern\/","title":{"rendered":"Videotutorial: Patrones de dise\u00f1o en PHP &#8211; Factory Pattern"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.davidrojas.net\/wp-content\/uploads\/2010\/03\/screencast_php_patterns.png\" alt=\"\" title=\"screencast_php_patterns\" width=\"163\" height=\"104\" class=\"derecha alignright size-full wp-image-774\" \/>Continuamos la serie de videos sobre patrones de dise\u00f1o en PHP con el patr\u00f3n creacional Factory, que consiste en un m\u00e9todo para crear objetos cuando no sabemos la clase exacta del objeto que va a ser creado. De esta manera encapsulamos clases en una clase general de la que heredar\u00e1n distintas subclases. Aunque el ejemplo utilizado es muy sencillo, este patr\u00f3n es bastante interesante si tenemos en cuenta que podemos redefinir m\u00e9todos en cada subclase, as\u00ed como automatizar la creaci\u00f3n de objetos utilizando variables (que podemos obtener de un fichero de settings).<br \/>\n<!--more--><\/p>\n<h3>Ver screencast (duraci\u00f3n: 5:41)<\/h3>\n<div class=\"video\">\n<iframe loading=\"lazy\" src=\"\/\/player.vimeo.com\/video\/80137774?portrait=0&amp;color=c00202\" width=\"490\" height=\"368\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen><\/iframe>\n<\/div>\n<ul>\n<li><a href=\"https:\/\/mega.co.nz\/#!iBUUUKCb!A-ppsWJ11f8PQ85UvhyHxVhZqlBFn6zkISzMcubdj7k\" title=\"Descargar versi\u00f3n alta calidad\">Descargar videotutorial en alta calidad &#8211; MOV (9 MB)<\/a><\/li>\n<li><a href=\"https:\/\/mega.co.nz\/#!ORMyTbgY!dyWmmXwSE4XBS6K_3LxlW1ikI6JUhwGS0JQJ89ypzYA\" title=\"Descargar versi\u00f3n iPod\/iPhone\">Descargar videotutorial optimizado para iPod\/iPhone &#8211; M4V (6 MB)<\/a><\/li>\n<\/ul>\n<p><\/p>\n<p>Pod\u00e9is ver el resto de screencasts en la <a href=\"http:\/\/www.davidrojas.net\/index.php\/category\/screencasts\/\" title=\"Videotutoriales de dise\u00f1o y desarrollo web, codeigniter, PHP, CSS3\">p\u00e1gina de videotutoriales<\/a>, o suscribiros al <a href=\"http:\/\/itunes.apple.com\/WebObjects\/MZStore.woa\/wa\/viewPodcast?id=326994250\" title=\"Enlace a videopodcast de David Rojas en iTunes\">podcast de iTunes<\/a>.<\/p>\n<h3>Ejemplo de implementaci\u00f3n<\/h3>\n<pre lang=\"php\">\r\n<?php\r\nabstract class Vehiculo{\r\n\tprotected $numruedas;\r\n\tpublic function getNumruedas(){\r\n\t\treturn $this->numruedas;\r\n\t}\r\n\t\r\n}\r\n\r\nclass Coche extends Vehiculo{\r\n\tprotected $numruedas = 4;\r\n}\r\n\r\nclass Bici extends Vehiculo{\r\n\tprotected $numruedas = 2;\r\n}\r\n\r\nclass VehiculoFactory{\r\n\tpublic static function crearVehiculo($tipo){\r\n\t\t$clasebase = 'Vehiculo';\r\n\t\tif(class_exists($tipo) && is_subclass_of($tipo, $clasebase))\r\n\t\t\treturn new $tipo;\r\n\t\telse\r\n\t\t\tthrow new Exception(\"No se reconoce el tipo de vehiculo $tipo\");\r\n\t\t\r\n\t}\r\n\t\r\n}\r\n\r\n$vehiculo = Array('Bici', 'Coche');\r\n\r\nforeach ($vehiculo as $v) {\r\n\techo \"El vehiculo $v tiene \".VehiculoFactory::crearVehiculo($v)->getNumruedas().\" ruedas<br \/>\";\r\n}\r\n?>\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Continuamos la serie de videos sobre patrones de dise\u00f1o en PHP con el patr\u00f3n creacional Factory, que consiste en un m\u00e9todo para crear objetos cuando no sabemos la clase exacta del objeto que va a ser creado. De esta manera encapsulamos clases en una clase general de la que heredar\u00e1n distintas subclases. Aunque el ejemplo [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,11,12],"tags":[],"class_list":["post-785","post","type-post","status-publish","format-standard","hentry","category-desarrollo-web","category-php","category-screencasts"],"_links":{"self":[{"href":"https:\/\/www.davidrojas.net\/index.php\/wp-json\/wp\/v2\/posts\/785","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.davidrojas.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.davidrojas.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.davidrojas.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.davidrojas.net\/index.php\/wp-json\/wp\/v2\/comments?post=785"}],"version-history":[{"count":20,"href":"https:\/\/www.davidrojas.net\/index.php\/wp-json\/wp\/v2\/posts\/785\/revisions"}],"predecessor-version":[{"id":983,"href":"https:\/\/www.davidrojas.net\/index.php\/wp-json\/wp\/v2\/posts\/785\/revisions\/983"}],"wp:attachment":[{"href":"https:\/\/www.davidrojas.net\/index.php\/wp-json\/wp\/v2\/media?parent=785"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.davidrojas.net\/index.php\/wp-json\/wp\/v2\/categories?post=785"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.davidrojas.net\/index.php\/wp-json\/wp\/v2\/tags?post=785"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}