Я пытаюсь использовать шаблон шаблона проектирования на Java. Итак, у меня есть абстрактный класс под названием Nenuphare
, который использует некоторые интерфейсы (Mort
, AlterationEtat
и ModifPV
), и мне нужно создать 5 типов Nenuphare. Если я прав, я должен оставить Nenuphare
абстрактным классом, я хочу остаться в шаблоне дизайна. Самый простой способ - создать 5 класс, который реализует Nenuphare и изменить Mort
, AlterationEtat
и ModifPV
для каждого класса. Но я должен сделать это с помощью enum
. К сожалению, перечисление не может расширять класс, поскольку оно уже расширяет тип перечисления.Расширяет абстрактный класс до перечисления - шаблон стратегии
Вот мой код Nenuphare
:
public abstract class Nenuphare {
public int etatVieillissement = 3;
protected String nom = "Eau";
protected Mort mort = new MortSubite();
protected AlterationEtat altetat = new NoAlteration();
protected ModifPV pv = new NoModifPV();
public Nenuphare(){}
public Nenuphare(Mort mort, AlterationEtat altetat, ModifPV pv){
this.mort = mort;
this.altetat = altetat;
this.pv = pv;
}
public void death(){
mort.mort();
}
public void alteration(){
altetat.altEtat();
}
public void modificationPV(){
pv.modifPV();
}
}
Я попытался создать свой тип 5 из Nenuphare
так:
public enum TypeNenuphare extends Nenuphare {
type1{ this.mort = ..., this.altetat = ..., this.pv = ... }, type2{ ... }, type3 { ... }, type4 { ... }, type5 { ...};
}
Конечно, это не работает из-за extends
. Я думал, что могу установить Nenuphare
как interface
и использовать implements
, но я должен использовать шаблон дизайна Strategy! Поскольку я новичок в этом, я действительно не знаю, как действовать.
Большое спасибо, хотя я должен был использовать абстрактный класс, чтобы оставаться в шаблоне дизайна Стратегии! К сожалению, для французских переменных. Для 'public void death() {...}' это имеет смысл для меня, поскольку метод печатает что-то на данный момент. – pioupiou1211
Вы можете использовать абстрактные классы, но вам не обязательно. – Fildor