Слуга (шаблон проєктування)
Слуга (англ. 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); } } }