Вместо того, чтобы разделять интерфейсы по классам одежды, это может быть более полезным, поскольку другие отметили, что каждый предмет одежды указывает что-то о том, что это (головной убор, халат и т. Д.).Хотя такой подход обычно не одобряется в объектно-ориентированном программировании, вероятно, существует не так много методов, которые были бы применимы к одному типу одежды, которые нельзя было бы применить к другим (даже если в некоторых случаях эффект можетбыть «без действия»).Например, если бы существовал метод «AnimateResponseToHeadMovement», «TopHat» мог бы действительно что-то делать, а «LeftSock» - нет, но поведение «LeftSock» все равно было бы четко определено.Обратите внимание, что определение действий довольно широко позволит учесть ситуации, в которых, например, может потребоваться анимировать шляпу человека в ответ на движения его руки, потому что она свисает особенно низко.Если бы метод «AnimateResponseToArmMovement» не присутствовал в интерфейсе IHeadWear, такой ответ мог бы быть невозможным.
Большая проблема, которую я подозреваю, заключается в определении способов взаимодействия предметов одежды.Возможно, вы захотите определить метод «CanBeWornInCombinationWith», который берет список одежды и сообщает, есть ли какие-либо конфликты.Также возможно определить список «ресурсов», требуемых для каждого предмета одежды, и подтвердить, что «ресурсов» достаточно, чтобы носить всю запрашиваемую одежду.Обратите внимание, что этот подход может быть несколько сложным, если некоторые вещи более требовательны к ресурсам, чем другие (например, некоторые можно носить только на правой руке, тогда как другие можно носить на любой).Даже определение интерфейса, который позволил бы одежде выяснить, можно ли носить комбинацию, было бы сложной задачей.
Прежде чем можно будет разработать интерфейс, я бы посоветовал вам выяснить, что вы действительно пытаетесьсделать;насколько вы должны быть универсальны для обеспечения взаимодействия между типами одежды и какими функциями должна обладать одежда.