में मैं अजगर में डेकोरेटर example के बारे में देखें:डेकोरेटर जावा
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>
और कुछ उत्सुक हो गया कि यह कैसे जावा में लागू किया जा सकता है, तो मैं खोज और कुछ 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>";
}
}
मैं इस एक की तरह एक जावा एनोटेशन का उपयोग करके उपरोक्त अजगर उदाहरण की तरह इस बनाने के लिए कैसे करें:
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>";
}
मैं कुछ समस्या हो गया, जब मैं नमूना करने की कोशिश की, समस्या मैं है पता नहीं कैसे मैं BoldWrapper
और ItalicWrapper
को main
विधि से str
मूल्य पारित कर सकते हैं तो यह और जोड़ सकते हैं कि यह कैसे वापस जाने के लिए है, तो main
विधि परिणाम प्रदर्शित कर सकती है जो को जोड़ती है।
कृपया सलाह दें कि एनोटेशन की मेरी समझ में कुछ गड़बड़ है या नहीं।
नहीं, आप एनोटेशन के साथ यह करने के लिए सक्षम होने के लिए नहीं जा रहे हैं। –
क्या सजावट डिजाइन पैटर्न का उपयोग किये बिना जावा के साथ इसे बनाने का कोई और तरीका है? – Crazenezz
आप जावा में ऑब्जेक्ट सजावट ठीक कर सकते हैं, लेकिन एनोटेशन के साथ नहीं। –