tôi thấy về trang trí example bằng Python:Decorator trong Java
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>
Và có một số tò mò như thế nào nó có thể được thực hiện trong Java, vì vậy tôi tìm kiếm và nhận được một số ví dụ sử dụng 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>";
}
}
Làm thế nào để làm cho điều này giống như ví dụ Python trên sử dụng một chú giải Java như thế này một:
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>";
}
tôi có một số vấn đề khi tôi đã cố gắng để làm mẫu, vấn đề là tôi không biết cách tôi có thể chuyển giá trị str
từ phương thức main
đến BoldWrapper
và ItalicWrapper
để nó có thể ghép nối và cách trả lại giá trị đó, vì vậyPhương phápcó thể hiển thị kết quả đã được ghép nối.
Vui lòng thông báo nếu có sự cố với hiểu biết của tôi về chú thích.
Nope, bạn sẽ không để có thể làm điều này với chú thích. –
Có cách nào khác để làm cho nó bằng java mà không cần sử dụng Mẫu thiết kế trang trí? – Crazenezz
Bạn có thể làm trang trí đối tượng trong Java tốt, nhưng không phải với chú thích. –