में सजावटी डिजाइन पैटर्न को समझना मैंने अभी सजावट डिजाइन पैटर्न सीखना शुरू किया, दुर्भाग्यवश मुझे सजावट पैटर्न को बेहतर ढंग से समझने के लिए विभिन्न सुधारों से गुजरना पड़ा जिससे मुझे बहुत भ्रम पैदा हुआ। हां, जहां तक मेरी समझ चिंता का विषय है, मेरा मानना है कि यह एक डेकोरेटर पैटर्नसी #
interface IComponent
{
void Operation();
}
class Component : IComponent
{
public void Operation()
{
Console.WriteLine("I am walking ");
}
}
class DecoratorA : IComponent
{
IComponent component;
public DecoratorA(IComponent c)
{
component = c;
}
public void Operation()
{
component.Operation();
Console.WriteLine("in the rain");
}
}
class DecoratorB : IComponent
{
IComponent component;
public DecoratorB(IComponent c)
{
component = c;
}
public void Operation()
{
component.Operation();
Console.WriteLine("with an umbrella");
}
}
class Client
{
static void Main()
{
IComponent component = new Component();
component.Operation();
DecoratorA decoratorA = new DecoratorA(new Component());
component.Operation();
DecoratorB decoratorB = new DecoratorB(new Component());
component.Operation();
Console.Read();
}
}
है, लेकिन नीचे कोड भी डेकोरेटर पैटर्न हो सकता है?
class Photo
{
public void Draw()
{
Console.WriteLine("draw a photo");
}
}
class BorderedPhoto : Photo
{
public void drawBorder()
{
Console.WriteLine("draw a border photo");
}
}
class FramePhoto : BorderedPhoto
{
public void frame()
{
Console.WriteLine("frame the photo");
}
}
class Client
{
static void Main()
{
Photo p = new Photo();
p.Draw();
BorderedPhoto b = new BorderedPhoto();
b.Draw();
b.drawBorder();
FramePhoto f = new FramePhoto();
f.Draw();
f.drawBorder();
f.frame();
}
}
मेरी समझ
मेरे द्वारा दिए गए दूसरे उदाहरण से, हम तीनों विधियों कॉल कर सकते हैं, लेकिन पहले उदाहरण से मैं पैदा करके तीनों विधियों तक पहुँच प्राप्त करने सकेंगे एक वस्तु
1 - सजावट, 2 - नहीं। मेरे बिंदु से, सजावटी को सजाए गए ऑब्जेक्ट को लपेटना चाहिए :) – tym32167
सजावटी मानकों का विस्तार करने का अनुमान है, ठीक है !!! तो दूसरा दूसरा सजावट पैटर्न क्यों नहीं है? क्या आप मुझे समझने में मदद कर सकते हैं? –
@LijinJohn मैं यह कहूंगा क्योंकि एक सजावटी * एक मौजूदा उदाहरण * सजाता है। अगर मेरे पास पहले से ही 'फोटो' का उदाहरण है, तो मैं इसे 'बोर्डर्ड फोटो' का उपयोग करके आसानी से सजाने नहीं कर सकता, मुझे 'बोर्डर्ड फोटो' का एक उदाहरण बनाना होगा और फिर मेरे मूल 'फोटो' इंस्टेंस से गुणों को कॉपी करना होगा। वह सजा नहीं है। – Kyle