widzę o dekoratora example w Pythonie:Dekorator w Javie
def makebold(fn):
def wrapped():
return "<b>" + fn() + "</b>"
return wrapped
def makeitalic(fn):
def wrapped():
return "<i>" + fn() + "</i>"
return wrapped
@makebold
@makeitalic
def hello():
return "hello world"
print hello() ## returns <b><i>hello world</i></b>
I dostał jakiś ciekawy sposób można zaimplementować w Javie, więc szukać i dostał jakiś przykład używając Decorator Design Pattern.
public class Main {
public static void main(String[] args) {
Wrapper word = new BoldWrapper(new ItalicWrapper());
// display <b><i>hello world</i></b>
System.out.println(word.make("Hello World"));
}
}
public interface Wrapper {
public String make(String str);
}
public class BoldWrapper implements Wrapper {
private Wrapper wrapper;
public BoldWrapper() {
}
public BoldWrapper(Wrapper wrapper) {
this.wrapper = wrapper;
}
@Override
public String make(String str) {
if(wrapper != null) {
str = wrapper.make(str);
}
return "<b>" + str + "</b>";
}
}
public class ItalicWrapper implements Wrapper {
private Wrapper wrapper;
public ItalicWrapper() {
}
public ItalicWrapper(Wrapper wrapper) {
this.wrapper = wrapper;
}
@Override
public String make(String str) {
if(wrapper != null) {
str = wrapper.make(str);
}
return "<i>" + str + "</i>";
}
}
Jak mogę zrobić to jak na przykład Python powyżej używając Java adnotacji jak ten:
public class Main {
public static void main(String[] args) {
@BoldWrapper
@ItalicWrapper
String str = "Hello World";
// Display <b><i>Hello World</i></b>
}
}
public @interface BoldWrapper {
public void wrap() default "<b>" + str + "</b>";
}
public @interface ItalicWrapper {
public void wrap() default "<i>" + str + "</i>";
}
dostałem jakiś problem, gdy próbowałem zrobić próbkę, problemem jest to, że nie wiem jak mogę przekazać wartość str
z metody do BoldWrapper
i ItalicWrapper
main
więc może złączyć i jak go zwrócić, więc main
metoda może wyświetlić wynik, który został połączony.
Należy poinformować, jeśli coś jest nie tak z moją adnotacją.
nie, nie będziemy w stanie to zrobić z adnotacji. –
Czy jest inny sposób, aby zrobić to z java bez używania wzorca projektu Decorator? – Crazenezz
Dekoracje obiektów można wykonywać w Javie, ale bez adnotacji. –