14/01/2005, 12:45
|
| | | Fecha de Ingreso: marzo-2004 Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 10 meses Puntos: 4 | |
Patrones Patrones
Los patrones son una forma para describir buenos diseños y mejores practicas. Muestran una solucion flexible problemas comunes de programacion. Patterns are ways to describe best practices and good designs. They show a flexible solution to common programming problems. Factory
La construccion de patrones permite la instanciacion de objetos en tiempo de ejecucion. Es llamado pa
The Factory pattern allows for the instantation of objects at runtime. It is called a Factory Pattern since it is responsible for "manufacturing" an object.
Example 19-23. Factory Method
<?php
class Example
{
// The factory method
function &factory($type)
{
if (include_once 'Drivers/' . $type . '.php') {
$classname = 'Driver_' . $type;
return new $classname;
} else {
throw new Exception ('Driver not found');
}
}
}
?>
Defining this method in a class allows drivers to be loaded on the fly. If the Example class was a database abstraction class, loading a MySQL and SQLite driver could be done as follows:
<?php
// Load a MySQL Driver
$mysql = Example::factory('MySQL');
// Load a SQLite Driver
$sqlite = Example::factory('SQLite');
?>
Singleton
The Singleton pattern applies to situations in which there needs to be a single instance of a class. The most common example of this is a database connection. Implementing this pattern allows a programmer to make this single instance easily accessible by many other objects.
Example 19-24. Singleton Function
<?php
class Example
{
// Hold an instance of the class
static private $instance;
// A private constructor
private function __construct()
{
echo 'I am constructed';
}
// The singleton method
static public function singleton()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
// Example method
public function bark()
{
echo 'Woof!';
}
}
?>
This allows a single instance of the Example class to be retrieved.
<?php
// This would fail because the constructor is private
$test = new Example;
// This will always retrieve a single instance of the class
$test = Example::singleton();
$test->bark();
?> |