Декоратор на JavaJAVA

Программисты JAVA общаются здесь
Anonymous
Декоратор на Java

Сообщение Anonymous »

Я вижу пример декоратора в Python:

Код: Выделить всё

def makebold(fn):
def wrapped():
return "" + fn() + "[/b]"[b]    return wrapped

def makeitalic(fn):
def wrapped():
return "[i]" + fn() + "[/i]"
return wrapped

@makebold
@makeitalic
def hello():
return "hello world"

print hello() ## returns [i]hello world[/i][/b][b]
Мне стало любопытно, как это можно реализовать на Java, поэтому я поискал и нашел пример с использованием шаблона проектирования Decorator.

Код: Выделить всё

public class Main {

public static void main(String[] args) {
Wrapper word = new BoldWrapper(new ItalicWrapper());
// display [i]hello world[/i][/b][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 "" + str + "[/b]";[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]";
}

}
Как мне сделать это, как в примере Python выше, используя аннотацию Java, подобную этой:

Код: Выделить всё

public class Main {
public static void main(String[] args) {
@BoldWrapper
@ItalicWrapper
String str = "Hello World";
// Display [i]Hello World[/i][/b][b]    }
}

public @interface BoldWrapper {
public void wrap() default "" + str + "[/b]";
}

public @interface ItalicWrapper {
public void wrap() default "[i]" + str + "[/i]";
}
Когда я пытался создать образец, у меня возникла проблема. Проблема в том, что я не знаю, как передать значение str из метод main для BoldWrapper и ItalicWrapper, чтобы он мог объединиться и как его вернуть, чтобы метод main мог отображать результат, который было объединено.

Пожалуйста, сообщите, если что-то не так с моим пониманием аннотации.

Подробнее здесь: https://stackoverflow.com/questions/120 ... or-in-java

Вернуться в «JAVA»