9. Patrón estructural Proxy
- Hola a todos.Seguimos con nuestro curso dedicado a los patrones de diseño software.Los patrones de diseño son unas técnicas para resolver problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.
- En esta ocasión veremos el patrón de diseño Proxy. El patrón Proxy proporciona un objeto intermediario entre el cliente y el objeto a utilizar, que permite configurar ciertas características (como el acceso) sin necesidad de modificar la clase original. Podríamos definir a un Proxy como una clase o componentes que hace el papel de intermediario entre la clase que queremos utilizar el cliente que la esta utilizando.
- Vamos a ver un ejemplo típico que consistirá en control de acceso mediante un proxy de protección. Para ello vamos a imaginar un escenario en el que se desea realizar la descarga de cierto material que, pese a estar disponible públicamente, no está permitida su posesión en el país del cliente.
- El modelo de clases que utilizaremos para el ejemplo es el siguiente:
- En el siguiente vídeo tenéis un ejemplo de este patrón de diseño.
- Os dejo el código de las diferentes clases vistas en el vídeo:
- Clases Servidor, ProxyMiServidor y MiServidor:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Proxy
{
public abstract class Servidor
{
public abstract string descargar(String url);
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Proxy
{
public abstract class Servidor
{
public abstract string descargar(String url);
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Proxy
{
class ProxyMiServidor:Servidor
{
MiServidor miServidor;
private int puerto;
private String host;
public ProxyMiServidor(int p, String h)
{
puerto = p;
host = h;
miServidor = null;
}
public override string descargar(String url)
{
string resultado = String.Empty;
if (restringido(url))
{
if (miServidor == null)
miServidor = new MiServidor(puerto, host);
resultado= miServidor.descargar(url);
}
else
resultado= "Desde esta ubicación no puedes descargar.";
return resultado;
}
public Boolean restringido(string ruta)
{
Boolean descargaPermitida = false;
if (ruta == "descargaPermitida")
descargaPermitida = true;
return descargaPermitida;
}
}
}
- Clases Program:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Proxy
{
class Program
{
static void Main(string[] args)
{
// Creamos el proxy a la página de descargas
Servidor servidor = new ProxyMiServidor(20, "https://cursoprogramacioncsharptutoriales.blogspot.com/");
// Descargamos un archivo permitido
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine( servidor.descargar("descargaPermitida"));
Console.ReadLine();
// Vamos a probar ahora con una descarga restringida
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(servidor.descargar("descargaDenegada"));
Console.ReadLine();
}
}
}
No hay comentarios:
Publicar un comentario