Какой шаблон разработки Вы выберете?

Я хочу разработать класс, который содержит процедуру для достижения цели. И это должно выполнить некоторый приказ, чтобы удостовериться последний метод, скажем, "ExecuteIt", вести себя правильно. в таком случае, какую скороговорку дизайна Вы будете использовать? который может удостовериться, что пользователь должен назвать открытый метод согласно некоторому упорядочиванию.

Если Вы действительно не знаете то, что я говорю, то можно ли совместно использовать меня некоторое понятие выбора скороговорки дизайна, или что Вы рассмотрите в то время как дизайн класс?

5
задан skaffman 2 June 2010 в 18:27
поделиться

7 ответов

Метод шаблонов - это то, что вам нужно. Это один из старейших, просто формализация способа компоновки классов.

http://en.wikipedia.org/wiki/Template_method_pattern

или как в этом примере кода:

abstract class AbstractParent // this is the template class
{
    // this is the template method that enforces an order of method execution
   final void executeIt()
   {
     doBefore(); // << to be implemented by subclasses
     doInTheMiddle() // also to be implemented by subclasses
     doLast(); // << the one you want to make sure gets executed last
   }

   abstract void doBefore();
   abstract void doInTheMiddle();
   final void doLast(){ .... }
}

class SubA extends AbstractParent
{
   void doBefore(){ ... does something ...}
   void doInTheMiddle(){ ... does something ...}
}

class SubB extends SubA
{
   void doBefore(){ ... does something different ...}
}

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

Не думайте о шаблонах. Подумайте о том, как вы могли бы решить эту конкретную проблему, не имея паттернов.

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

Не используйте их как формочки для печенья. Это последнее, что вы хотите сделать.

4
ответ дан 18 December 2019 в 09:06
поделиться

По сути, это не шаблон, но: если вы хотите убедиться, что код / ​​методы выполняются в определенном порядке, сделайте класс имеющим только один общедоступный метод, который затем вызывает закрытые методы в правильной последовательности. .

3
ответ дан 18 December 2019 в 09:06
поделиться

Я думаю, вы ищете метод шаблона узор.

6
ответ дан 18 December 2019 в 09:06
поделиться

Простой и прагматичный подход к обеспечению определенной последовательности шагов в любом API состоит в том, чтобы определить набор классов (а не только один класс) таким образом, чтобы каждый следующий действительный шаг принимал в качестве параметра объект, полученный из предыдущего шага, то есть:

   Fuel   coal   = CoalMine.getCoal();
   Cooker stove  = new Cooker (gas); 

   Filling apple = new AppleFilling();
   Pie applePie = new Pie(apple);

   applePie.bake(stove);

То есть, чтобы запечь pie вам необходимо предоставить объект Cooker, который, в свою очередь, требует, чтобы сначала было создано какое-то подходящее топливо. Точно так же, прежде чем вы сможете получить экземпляр пирога, вам нужно будет подготовить немного начинки.

В этом случае семантика использования API явно определяется его синтаксисом. Будь проще.

3
ответ дан 18 December 2019 в 09:06
поделиться

Я думаю, что вам на самом деле не нужно ничего выполнять, просто подготовьте операторы, ресурсы и все, что захотите. Таким образом, что бы ни было порядок, в котором пользователь вызывает методы, которые будет гарантировано фактическое выполнение; просто потому, что у вас есть полный контроль над реальным исполнением непосредственно перед его выполнением.

IMHO Template Method так же мало общего с вашей целью.

РЕДАКТИРОВАТЬ: для большей ясности. Сделайте так, чтобы в вашем классе был один общедоступный метод Execute и ряд других общедоступных методов, чтобы сообщить вашему классу, что делать (когда это делать - это ответственность вас, а не пользователя); затем создайте несколько частных методов, выполняющих реальную работу, они будут вызываться в правильном порядке вашим Execute, как только пользователь завершит настройку.

Дайте пользователю возможность настройки, оставьте выполнение для себя. Он что говорит, а как решать вам.

2
ответ дан 18 December 2019 в 09:06
поделиться

Шаблонный метод является рациональным, если у вас есть иерархия классов, а базовый класс определяет защищенные шаги операции в своем общедоступном методе шаблона. Не могли бы вы уточнить свой вопрос?

0
ответ дан 18 December 2019 в 09:06
поделиться

В качестве общей концепции вы должны выбрать паттерн как стандартное решение стандартной проблемы, поэтому, я согласен с Одедом, "Метод шаблонов", кажется, соответствует вашим потребностям (но то, что вы объяснили, возможно, слишком мало). Не используйте шаблон как "фетиш", что вы должны иметь в виду, так это:

  1. Как я могу решить свою проблему стандартным способом?
  2. Есть ли для этого шаблон?
  3. Это самый простой способ?
0
ответ дан 18 December 2019 в 09:06
поделиться