Patrones de diseño: ISP

Share

Vamos con ISP:
Interface Segregation Principle (Principio de Segregación de Interfaces)

Este ejemplo viola el principio ISP, tenemos una clase Manager que representa la persona que dirije a los trabajadores. Y tenemos 2 tipos de trabajadores, algunos muy eficientes. Ambos tipos necesitan un break para comer. Ahora, también hay algunos robots y éstos no necesitan comer.
Si conservamos el diseño, la clase robots se ve forzada a implementar el método eat().

// ISP - Mal ejemplo
interface IWorker {
	public void work();
	public void eat();
}

class Worker implements IWorker{
	public void work() {
		// ....working
	}
	public void eat() {
		// ...... eating in launch break
	}
}

class SuperWorker implements IWorker{
	public void work() {
		//.... working much more
	}

	public void eat() {
		//.... eating in launch break
	}
}

class Manager {
	IWorker worker;

	public void setWorker(IWorker w) {
		worker=w;
	}

	public void manage() {
		worker.work();
	}
}

A continuación tenemos el código siguiendo ISP. La interface IWorker la dividimos en 2.

// ISP - Correcto
interface IWorker extends Feedable, Workable {
}

interface IWorkable {
	public void work();
}

interface IFeedable{
	public void eat();
}

class Worker implements IWorkable, IFeedable{
	public void work() {
		// ....working
	}

	public void eat() {
		//.... eating in launch break
	}
}

class Robot implements IWorkable{
	public void work() {
		// ....working
	}
}

class SuperWorker implements IWorkable, IFeedable{
	public void work() {
		//.... working much more
	}

	public void eat() {
		//.... eating in launch break
	}
}

class Manager {
	Workable worker;

	public void setWorker(Workable w) {
		worker=w;
	}

	public void manage() {
		worker.work();
	}
}

Conclusion

Como resumen:

“Los clientes no deberían ser obligados a depender de interfaces que no utilizan”
o…
“Muchas interfaces muy especializadas son preferibles a una interfaz general en la que se agrupen todas las interfaces”

Ambas son buenas…

Saludos,
Sed felices ^^

One Response to “Patrones de diseño: ISP”

  1. Kayce Baer dice:

    Fed up with getting low numbers of useless visitors to your site? Well i want to share with you a fresh underground tactic that makes me personally $900 per day on 100% AUTOPILOT. I possibly could be here all day and going into detail but why dont you just check their site out? There is really a great video that explains everything. So if your serious about making simple hard cash this is the website for you. Auto Traffic Avalanche

Leave a Reply