2013-04-25 2 views
3

У меня есть экзамен в течение нескольких часов, и я пытаюсь решить для него типовые вопросы. Я не мог найти решение следующего вопроса.UML Class Diagram for Strategy Pattern

рисовать диаграмму классов, соответствующую следующей ситуации:

продуктовый магазин (например, супермаркет) продает предметы. Существует два типа предметов: съедобный (т. Е. Любой предмет, который может использоваться как пища) и не съедобный. Некоторые предметы продаются по весу, и некоторые продаются за единицу. Некоторые предметы облагаются налогом, а другие - нет. Некоторые предметы имеют специальные цены при продаже в группах (например, 2 за 3 доллара США). Покупка может содержать много товаров .

В диаграмме классов показаны только классы/абстрактные классы/интерфейсы, ассоциации, и множественности для ассоциаций. Не включайте никаких операций! Четко укажите интерфейсы и абстрактные классы (если есть) в вашем дизайне.

Кроме того, ваш дизайн должен быть таким, как гибкий насколько возможно. В частности, необходимо обратить внимание на следующие моменты:

1) Элемент либо съедобный или нет, и этот факт не меняется в течение всего срока службы данный пункт, в то время как ценовые стратегии могут меняться в течение всего срока службы предмета.

2) Каждая стратегия ценообразования связана с определенным набором операций. Например, для стратегии налоговой, является ли налогооблагаемый элемент, мы можем иметь операцию , которая вычисляет налог (эта функция может затем возвращать 0 для необлагаемых элементов)

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

4) Несмотря на то, что набор операций для стратегии ценообразования остается неизменным в разных пунктах , мы можем реализовать эти операции различными способами для разных товаров . Например, мы можем рассчитывать налог иначе для апельсинов и яблок.

Я пытался что-то вроде этого, думая, что он может подходить для шаблон стратегии дизайна, но я не уверен, что на всех.

enter image description here

+0

Имеет этот вопрос до сих пор актуальность для вас, или вы можете закрыть этот вопрос? Я думаю, что многие люди, рассматривающие этот вопрос, задают вопрос о необходимости получить ответ? Задавать этот вопрос вам не означает, что я отвечу на вопрос. Моей главной мотивацией является еще одно любопытство: как прошел ваш экзамен? –

+0

Это было не так уж плохо, я получил 80/100. На вопрос, на самом деле, я до сих пор не знаю точного ответа. –

+0

Поздравляем с вашим экзаменом! Если вы все еще хотите получить ответ, вы можете изменить вопрос. Это может помочь. –

ответ

2

Во-первых есть магазин, который может быть продуктовый магазин. В любом магазине есть два типа объектов: предметы и покупки. Без предметов и/или покупок магазин перестанет существовать. Элементы будут существовать без магазина (они должны быть доставлены в магазин, например), но покупки принадлежат самому магазину. Вот почему есть агрегированные отношения между магазином и товаром, но композиционные отношения между магазином и покупкой.

Элементы имеют некоторые функции, такие как название, съедобные, облагаемые налогом, весом и единицей. Я не реализовал все характеристики предмета, но идея есть.Есть много способов продать эти предметы. В то же время может быть больше стратегий. Для этой ситуации разработан узор декоратора. Он может динамически добавлять несколько стратегий во время выполнения. Он украшает элемент - интерфейс, потому что он связан с элементом, потому что изменение способа продажи находит свою причину в Item. У этого есть связь с покупкой класса, но это не часть покупки. Каждый предмет, который будет продан, относится к определенной покупке. Он также может иметь государство, которое еще не продается. Вот почему множественность покупки равна 0-1. В целом кипит вниз к этому:

class diagram of items sold in a store

+0

Есть ли абстракция между sellItem и Item? –

+0

Да, точка шаблона Decorator заключается в том, что SellItem все еще можно назвать интерфейсом элемента, но имеет интерфейс Item как член, а функции, возвращающие цену элемента, возвращают украшенную переменную item. Он наследует и содержит элемент одновременно. Взгляните на эту диаграмму в Википедии: http://en.wikipedia.org/wiki/Decorator_pattern. Я не включил отношения сдерживания на диаграмме, но я включил переменную item: Item, которая описывает тот же принцип более кратким образом. –