Лучший шаблон для строительства этого объекта? - PullRequest
0 голосов
/ 04 сентября 2010

Я создаю перечислимые значения, которые имеют структуру данных, подобную следующей:

enum MetaType {
 HUMAN(
  new MetaTypeAttribute(AttributeType.BODY, 1, 6),
  new MetaTypeAttribute(AttributeType.AGILITY, 1, 6),
  new MetaTypeAttribute(AttributeType.REACTION, 1, 6)
 ),
 ORK(
  new MetaTypeAttribute(AttributeType.BODY, 4, 9),
  new MetaTypeAttribute(AttributeType.AGILITY, 1, 6),
  new MetaTypeAttribute(AttributeType.REACTION, 1, 6)
 );

 MetaType(MetaTypeAttribute body, MetaTypeAttribute agility, MetaTypeAttribute reaction) {
 }
}

Итак, есть перечисление MetaTypes;Каждый MetaType определяет фиксированный набор MetaTypeAttributes, который состоит из минимального и максимального значения для этого атрибута.

Я ненавижу этот синтаксис.Это слишком долго, некрасиво и не мешает мне передать неверный AttributeType (AttributeType должен соответствовать порядку аргументов конструктора MetaType; AttributeType.BODY> body и т. Д.)То, что я хочу, - это лучший шаблон для обеспечения того, чтобы объект был построен по этой точной схеме.

Этот код сокращен.В действительности существует 9 типов атрибутов.

Есть предложения по улучшению?

Ответы [ 2 ]

1 голос
/ 04 сентября 2010
    enum MetaType {
 HUMAN(new MyRange(1,1), new MyRange(1, 10), new MyRange(1,10)
 ),
 ORK(new MyRange(1,1), new MyRange(1, 10), new MyRange(1,10)
 );

 MetaType(MyRange body, MyRange agility, MyRange reaction) {
      this.bodyAttrib = new MetaTaypAttibute(AttributeType.BODY, body);
      this.agilityAttrib = new MetaTaypAttibute(AttributeType.AGILITY, agility);
      this.reactionAttrib = new MetaTaypAttibute(AttributeType.REACTION, reactiony);}
}
0 голосов
/ 04 сентября 2010

Если вы рассматриваете разные типы атрибутов, возможно, вам действительно следует создать эти типы атрибутов как классы / подклассы вместо перечислений.У вас будут все преимущества ООП для управления поведением каждого типа (унаследованные методы, перезапись методов, ...), и они будут безопасными для типов.

abstract class AbstractTypeAttribute{
    private final int min, max;
    public AbstractTypeAttribute(int min, int max){
        //...
    }
    //...
}

class Body extends AbstractTypeAttribute{
    public Body(int min, int max){
        super(min, max);
        //...
    }
    //...
}

Вам следует подумать оделая это вместо мета-атрибутов и мета-типов тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...