Pracuję nad kodem interfejsu użytkownika, w którym mam Action
klasę, coś takiego -
public class MyAction extends Action {
public MyAction() {
setText("My Action Text");
setToolTip("My Action Tool tip");
setImage("Some Image");
}
}
Kiedy ta klasa Action została utworzona, prawie zakładano, że Action
klasy nie będzie można dostosowywać (w pewnym sensie - jej tekst, etykieta lub obraz nie zostaną zmienione w żadnym miejscu w kodzie). Teraz potrzebujemy zmienić tekst akcji w pewnym miejscu w kodzie. Zasugerowałem więc, aby mój współpracownik usunął zakodowany tekst akcji z konstruktora i zaakceptował go jako argument, aby wszyscy byli zmuszeni przekazać tekst akcji. Coś takiego jak ten kod poniżej -
public class MyAction extends Action {
public MyAction(String actionText) {
setText(actionText);
setTooltip("My Action tool tip");
setImage("My Image");
}
}
Uważa jednak, że skoro setText()
metoda należy do klasy podstawowej, można ją elastycznie wykorzystać do przekazywania tekstu akcji wszędzie tam, gdzie tworzona jest instancja akcji. W ten sposób nie ma potrzeby zmiany istniejącej MyAction
klasy. Więc jego kod wyglądałby mniej więcej tak.
MyAction action = new MyAction(); //this creates action instance with the hardcoded text
action.setText("User required new action text"); //overwrite the existing text.
Nie jestem pewien, czy jest to właściwy sposób radzenia sobie z problemem. Myślę, że w wyżej wymienionym przypadku użytkownik i tak zamierza zmienić tekst, więc dlaczego nie zmusić go podczas konstruowania akcji? Jedyną korzyścią, jaką widzę w oryginalnym kodzie, jest to, że użytkownik może utworzyć klasę Action bez większego zastanowienia nad ustawieniem tekstu.