2008-08-30 14 views
7

में उपयोग किए गए डिज़ाइन पैटर्न के कुछ वास्तविक जीवन उदाहरण क्या हैं, इस समय मैं सिर के पहले डिजाइन पैटर्न के माध्यम से पढ़ रहा हूं और पुस्तक उत्कृष्ट है, मैं यह भी देखना चाहूंगा कि वास्तव में वास्तविक दुनिया में इनका उपयोग कैसे किया जाता है।सॉफ़्टवेयर

यदि आप डिज़ाइन पैटर्न उपयोग के एक अच्छे उदाहरण के बारे में जानते हैं (अधिमानतः ओएसएस प्रोग्राम में तो हम एक नज़र देख सकते हैं :) तो कृपया इसे नीचे सूचीबद्ध करें।

उत्तर

3

पर्यवेक्षक पैटर्न के लिए मेरे लिए एक आह-हाई क्षण यह महसूस करना था कि घटनाओं के साथ यह कितना निकटता से जुड़ा हुआ है। एक ऐसे विंडोज प्रोग्राम पर विचार करें जिसे दो रूपों के बीच कमजोर संचार को प्राप्त करने की आवश्यकता है। यह पर्यवेक्षक पैटर्न के साथ आसानी से पूरा किया जा सकता है।

नीचे दिया गया कोड दिखाता है कि फ़ॉर्म 2 एक घटना को कैसे सक्रिय करता है और पर्यवेक्षक के रूप में पंजीकृत किसी भी अन्य वर्ग को अपना डेटा प्राप्त होता है।

एक महान पैटर्न संसाधन के लिए इस लिंक देखें: http://sourcemaking.com/design-patterns-and-tips

Form1 के कोड:

namespace PublishSubscribe 
{ 
    public partial class Form1 : Form 
    { 
     Form2 f2 = new Form2(); 

     public Form1() 
     { 
      InitializeComponent(); 

      f2.PublishData += new PublishDataEventHander(DataReceived); 
      f2.Show(); 
     } 

     private void DataReceived(object sender, Form2EventArgs e) 
     { 
      MessageBox.Show(e.OtherData);    
     } 
    } 
} 

Form2 के कोड

namespace PublishSubscribe 
{ 

    public delegate void PublishDataEventHander(object sender, Form2EventArgs e); 

    public partial class Form2 : Form 
    { 
     public event PublishDataEventHander PublishData; 

     public Form2() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      PublishData(this, new Form2EventArgs("data from form2"));  
     } 
    } 

    public class Form2EventArgs : System.EventArgs 
    { 
     public string OtherData; 

     public Form2EventArgs(string OtherData)   
     { 
      this.OtherData = OtherData; 
     } 
    } 
} 
+0

PublishData ईवेंट कहां लिखा गया है? –

+0

मेरा मतलब है PublishDataEventHander, उस घटना में क्या होना चाहिए जहां लिखा गया है? –

3

मैं निष्क्रिय दृश्य का उपयोग, Model View Presenter स्वरूप की एक स्वाद, टेस्टेबिलिटी/रखरखाव/आदि बढ़ाने के लिए विकास (.NET) जैसे किसी भी वेब फॉर्म के साथ

उदाहरण के लिए, अपने कोड-पीछे फ़ाइल इस

Partial Public Class _Default 
    Inherits System.Web.UI.Page 
    Implements IProductView 

    Private presenter As ProductPresenter 

    Protected Overrides Sub OnInit(ByVal e As System.EventArgs) 
     MyBase.OnInit(e) 
     presenter = New ProductPresenter(Me) 
    End Sub 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     presenter.OnViewLoad() 
    End Sub 

    Private ReadOnly Property PageIsPostBack() As Boolean Implements IProductView.PageIsPostBack 
     Get 
      Return Page.IsPostBack 
     End Get 
    End Property 

    Public Property Products() As System.Collections.Generic.List(Of Product) Implements Library.IProductView.Products 
     Get 
      Return DirectCast(gridProducts.DataSource(), List(Of Product)) 
     End Get 
     Set(ByVal value As System.Collections.Generic.List(Of Product)) 
      gridProducts.DataSource = value 
      gridProducts.DataBind() 
     End Set 
    End Property 
End Class 

इस कोड के पीछे शून्य तर्क के साथ एक बहुत पतली दृश्य के रूप में काम कर रहा है की तरह कुछ लग सकता है। यह तर्क इसके बजाय एक प्रस्तुतकर्ता वर्ग में धक्का दिया जाता है जिसे यूनिट परीक्षण किया जा सकता है।

Public Class ProductPresenter 
    Private mView As IProductView 
    Private mProductService As IProductService 

    Public Sub New(ByVal View As IProductView) 
     Me.New(View, New ProductService()) 
    End Sub 

    Public Sub New(ByVal View As IProductView, ByVal ProductService As IProductService) 
     mView = View 
     mProductService = ProductService 
    End Sub 

    Public Sub OnViewLoad() 
     If mView.PageIsPostBack = False Then 
      PopulateProductsList() 
     End If 
    End Sub 

    Public Sub PopulateProductsList() 
     Try 
      Dim ProductList As List(Of Product) = mProductService.GetProducts() 
      mView.Products = ProductList 
     Catch ex As Exception 
      Throw ex 
     End Try 
    End Sub 
End Class 
3

code.google.com उपयोग

उदाहरण "फैक्टरी" के लिए search result आप ऐसे मामलों में जहां कारखाना पैटर्न लागू किया गया है की एक बहुत कुछ मिल जाएगा के लिए

3

उत्तरदायित्व की श्रृंखला पैटर्न डीओएम कार्यक्रमों के संचालन में लागू किया गया है। उदाहरण के लिए, (और थोड़ा सा सरलीकृत) जब कोई तत्व क्लिक किया जाता है, तो उस तत्व को घटना को संभालने का पहला मौका मिलता है, और तब प्रत्येक पूर्वजों को टर्न में शीर्ष स्तर दस्तावेज़ तक पहुंच जाता है या उनमें से एक स्पष्ट रूप से ईवेंट को रोक देता है " बुलबुले "किसी और आगे।

1

सी #, जावा और पायथन के पास इटरेटर पैटर्न का मानक कार्यान्वयन है। सी # और पायथन में यह भाषा में अंतरित किया गया है ताकि आप उपज वापसी विवरणों का उपयोग कर सकें।

0

समग्र यूआई में व्यापक रूप से उपयोग किया जाता है। घटक पत्ते के घटक हो सकते हैं उदा। बटन और लेबल या कंपोजिट्स उदा। पैनल, जिसमें अन्य पत्ते या समग्र घटक हो सकते हैं। ग्राहक के दृष्टिकोण से, सभी घटकों का इलाज समान होता है, जो क्लाइंट कोड को बहुत सरल बनाता है।

0

टेम्पलेट पैटर्न आमतौर पर पूर्व शर्त स्थापित करने और पोस्टकंडिशन का जवाब देने के लिए डॉटनेट घटनाओं के कार्यान्वयन में उपयोग किया जाता है।अपघटन मामले

void FireMyEvent(object sender, EventArgs e) 
{ 
    if (_myevent != null) _myEvent(sender, e); 
} 

जिसमें पूर्व शर्त की जांच की गई है। इस मामले में पूर्व शर्त यह है कि हैंडलर केवल तभी लगाए जा सकते हैं जब कम से कम एक बाध्य हो। (कृपया मुझे मत बताएं कि मुझे हैंडलर को अतुल्यकालिक रूप से बुलाया जाना चाहिए। मुझे पता है। मैं टेम्पलेट पैटर्न को चित्रित कर रहा हूं, असीमित प्रोग्रामिंग तकनीक नहीं।)

एक और विस्तृत पूर्व शर्त में ऐसी संपत्ति की जांच करना शामिल हो सकता है जो घटनाओं की गोलीबारी को नियंत्रित करता है।

खाका पैटर्न भी आमतौर पर उदाहरण

public virtual void BeforeOpenFile(string filepath) 
{ 
    //stub 
} 
public virtual void AfterOpenFile(string filepath) 
{ 
    //stub 
} 
public sealed void OpenFile(string filepath) 
{ 
    BeforeOpenFile(filepath); //do user customisable pre-open bits 
    //do standard bits here 
    AfterOpenFile(filepath); //do user customisable post-open bits 
} 
0

कमान पैटर्न हर जगह प्रयोग किया जाता है आप पूर्ववत कार्यक्षमता के लिए, हुक लागू करने के लिए प्रयोग किया जाता है।

1

शायद एक अच्छा उदाहरण, के रूप में Head First Design Patterns भी में बताया, जावा घुमाओ एपीआई जो ऑब्जर्वर पैटर्न को लागू करता है। अधिक विशेष रूप से, जेबटन (या सुपरक्लास सार बटन) अवलोकन वर्ग है और स्विंग में "पर्यवेक्षकों" या "श्रोताओं" को जोड़ने और निकालने के तरीकों को प्रदान करता है।

संबंधित मुद्दे