5

это пример шаблона шаблона шаблона?Каковы сходства между шаблоном и шаблонами проектирования стратегии?

public abstract class Character{ 

    public final void useWeapon(){ 
     useBusterSword(); 
     useMateriaBlade(); 
     useUltimateWeapon(); 
    } 

    public abstract void useBusterSword(); 
    public abstract void useMateriaBlade(); 
    public abstract void useUltimateWeapon(); 
} 

public class Cloud extends Character{ 

    public void useUltimateWeapon() { 
     System.out.println("Change Weapon to Ultima Weapon"); 
    } 


    public void useBusterSword() { 

    } 


    public void useMateriaBlade() { 

    } 
} 


public class TestGame { 
    public static void main(String[] args){ 
     Character cloud = new Cloud(); 
     cloud.useWeapon(); 
    } 
} 

Если да, то в чем преимущество использования этого шаблона, чем шаблон стратегии?

Стратегия Pattern

public class Character { 
    WeaponBehavior w; 
    public void setWeaponBehavior(WeaponBehavior wb){ 
     w = wb; 
    } 

    public void useWeapon(){ 
     w.useWeapon(); 
    } 
} 

public class Cloud extends Character{ 

    public Cloud(){ 
     w = new UltimaWeapon(); 
    } 

} 


public interface WeaponBehavior { 
    public void useWeapon(); 
} 

public class UltimaWeapon implements WeaponBehavior { 
    public void useWeapon() { 
     System.out.println("Change Weapon to UltimaWeapon"); 
    } 

} 

public class BusterSword implements WeaponBehavior { 
    public void useWeapon() { 
     System.out.println("Change Weapon to MateriaBlade"); 
    } 

} 

public class MateriaBlade implements WeaponBehavior { 
    public void useWeapon() { 
     System.out.println("Change Weapon to MateriaBlade"); 
    } 

} 

public class TestGame { 
    public static void main(String[] args){ 
     Character c = new Cloud(); 
     c.useWeapon(); 
    } 
} 

То, что я заметил, шаблон стратегии инкапсулировать, что изменяется в отличие от TemplateMethod шаблон позволяет подклассы обрабатывает то, что меняется.

ответ

1

Шаблон метода шаблона полезен, когда вы хотите использовать поля какого-либо родительского класса, и когда ваша реализация не является целым алгоритмом, а лишь некоторой «логикой», очень специфичной для вашей иерархии классов.

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

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

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

2

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

Лучший вариант использования шаблона для замены абстрактного метода с помощью конкретной реализации.

E.g. Вы хотите приготовить л и ваш рецепт:

  1. Принимать Ингредиенты
  2. положить их в
  3. тепла
  4. поддавки coocked еды для Smbd

В Java рецепте просто метод в некоторых Recipe класс

void cook(){ 
    takeIngridients(); 
    putIt(); // abstract 
    heat(); //abstract 
    giveFood(); 
} 

Вы создаете PanRecipe класс extends Recipe и реализуете абстрактные методы для использования панорамирования. Другой класс может быть GrillRecipe и реализовать методы использования гриля. Теперь вы можете просто называть его grillRecipe.cook(), и вместо шаблона стратегии не нужно копировать реализацию повторяющихся методов takeIngridients и giveFood.

3

Strategy шаблон определяет семейство алгоритмов и делает их взаимозаменяемым. Клиентский код может использовать разные алгоритмы, поскольку алгоритмы инкапсулированы.

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

Так как вы можете увидеть намерения отличаются в каждом шаблоне. Так что дело не в преимуществе одного над другим.

1

Сходство:

  1. Оба шаблон метода & Стратегия поведенческие модели.
  2. Обе модели используются для изменения алгоритма сублимитами классов, но с разницей - частичное или полное

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

Основных отличия:

  1. метод Шаблон использует наследование и Стратегии использует композицию
  2. МетодШаблона реализован базовый класс не должен быть перегружен. Таким образом, структура алгоритма управляется суперкласса, а детали выполнены в суб классы
  3. Стратегия инкапсулирует алгоритм позади интерфейса, которые обеспечивают нам возможность изменить алгоритм во время выполнения

Похожие сообщения:

Real World Example of the Strategy Pattern

Template design pattern in JDK, could not find a method defining set of methods to be executed in order

Посмотрите на Template method и Strategy статьи для лучшего понимания.

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