Слуга (шаблон проєктування)

Слуга (англ. Collecting Parameter) — шаблон проєктування, який дозволяє визначити спільний функціонал для різних ієрархій класів.

Реалізація[ред. | ред. код]

Нехай, необхідно реалізувати функціональність, яка спільна для різної ієрархії класів, наприклад, рух у просторі для геометричних фігур та тварин. Для того, щоб не дублювати код його можна винести у функцію, спільний клас (для мов що дозволяють множинне успадкування), у метод інтерфейсу (для мов, що дозволяють реалізацію інтерфейсу), метод розширення інтерфейсу, тощо.

// допоміжний клас public class Position  { 	private int xPosition; 	private int yPosition;  	public Position(int x, int y)  	{ 		xPosition = x; 		yPosition = y; 	}     . . . }  // інтерфейс, що об'єднує ієрархію класів, та надає необхідні методи для роботи "слуги" public interface IMovable  { 	void setPosition(Position p); 	Position getPosition(); }  // несумісні ієрархії класів public abstract class ShapeBase { ... } public class Triangle: ShapeBase, IMovable { ... } public class Circle: ShapeBase, IMovable { ... }  public abstract class AnimalBase { ... } public class Cat: AnimalBase, IMovable { ... } public class Duck: AnimalBase, IMovable { ... }  // слуга, містить спільний код public class MoveServant  { 	public void MoveTo(IMovable serviced, Position expectedPosition)  	{ 		while (serviced.getPosition() != expectedPosition) 		{ 			var dPosition = (expectedPosition - service.getPosition()) / 10;  			serviced.setPosition(dPosition); 		} 	} } 

Див. також[ред. | ред. код]

Джерела[ред. | ред. код]