2016-01-08 5 views
1

Я новичок в ООП, и я пытаюсь создать два объекта одновременно с отношениями HAS-A. У меня есть объект Box, у которого есть объект Contents внутри него, и я борюсь с тем, как конструктор должен иметь дело с этим разумно. Мои исследования в основном выкопали вещи о цепочке конструкторов в рамках одного класса. Содержимое объекта также выбирает ContentsType из перечисления:Создание объекта переменной экземпляра

Box:

public class Box { 
    double volume; 
    Contents contents; 

    public Box(int inputVolume, String inputContInfo, ContentsType inputContType){ 
     this.volume = inputVolume; 
     contents = new Contents(inputContInfo, inputContType); 
    } 
} 

Содержание:

class Contents { 
    ContentsType contType; 
    String contInfo; 

    Contents(String inputContInfo, ContentsType inputContType){ 
     this.contInfo = inputContInfo; 
     this.contType = inputContType; 
    } 
} 

ContentsType:

public enum ContentsType { 
    CARGO, 
    GIFT, 
    OTHER; 
} 

выше конструктор работ Box, но это разрушение инкапсуляции классов? Это кажется неправильным, и я хотел бы найти то, что принятый способ сделать это. Любые предложения будут ценны!

редактировать: Я просто пытаюсь создать окно из своего конструктора, например:

Box aBox = new Box(2, "Something", ContentsType.CARGO); 
+0

как вы пытаетесь создать экземпляр, пожалуйста, предоставьте это. – YoungHobbit

ответ

2

Нет, не нарушая инкапсуляцию классов. Это может быть примером структурного шаблона проектирования, в котором вы меняете характер класса, фактически не подвергая реализацию класса клиенту.

+0

Вы бы сказали, что это любой из названных шаблонов дизайна или близко к одному из них? – BitBodger

+0

Посмотрите на установку впрыска и конструкцию зависимостей. Хотя ваш шаблон не совсем соответствует шаблону проектирования, но напоминает DI и может рассматриваться как своего рода шаблон структурного проектирования. –

1

Убедитесь, что вы закрыли свои поля - так как вы не хотите, чтобы кто-то менял значения напрямую. Кроме этого, ваш код выглядит отлично.

0

Я не понимаю, как этот код разрушает инкапсуляцию. Поскольку ваши исследования посвящены цепочке конструкторов, этот код хорошо и хорошо. В противном случае я бы предложил создать Box и Contents отдельно и предоставить установщик содержимого в классе Box.

Смежные вопросы