ما هي بعض الأمثلة على الحياة الحقيقية من أنماط التصميم المستخدمة في البرنامج [مغلقة]

StackOverflow https://stackoverflow.com/questions/36129

  •  09-06-2019
  •  | 
  •  

سؤال

أنا أقرأ من خلال أنماط تصميم أول رئيس في هذه اللحظة وبينما كتاب ممتاز وأود أيضا أن نرى كيف هذه هي في الواقع تستخدم في العالم الحقيقي.

إذا كنت تعرف من خير مثال على تصميم نمط الاستخدام (يفضل أن يكون في برمجيات المصدر المفتوح برنامج لذلك نحن يمكن أن يكون لها نظرة :) ثم يرجى القائمة أدناه.

هل كانت مفيدة؟

المحلول

وهو آه ها اللحظة بالنسبة لي المراقب نمط أن ندرك كيف يرتبط بشكل وثيق مع الأحداث.النظر في برنامج ويندوز الذي يحتاج لتحقيق فضفاضة الاتصالات بين شكلين.التي يمكن بسهولة أن يتم ذلك مع نمط مراقب.

رمز أدناه يبين كيف Form2 الحرائق حدث أي فئة أخرى مسجلة بصفة مراقب الحصول على البيانات.

انظر هذا الرابط لمجموعة كبيرة أنماط الموارد: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;
        }
    }
}

نصائح أخرى

يمكنني استخدام السلبي ، نكهة نموذج عرض مقدم نمط مع أي نماذج الويب مثل التنمية (.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

استخدام code.google.com

على سبيل المثال نتيجة البحث عن "مصنع" سوف تحصل على الكثير من الحالات التي يكون فيها نمط مصنع يتم تنفيذه.

على سلسلة من المسؤولية نمط تنفيذها في التعامل مع دوم الأحداث.على سبيل المثال, (وتبسيط قليلا) عندما عنصر النقر على هذا العنصر يحصل على أول فرصة للتعامل مع هذا الحدث ، ومن ثم كل الجد في تيرن حتى أعلى مستوى الوثيقة يتم الوصول إلى أو واحد منهم صراحة توقف الحدث "محتدما" أي زيادة.

C#, Java و Python يكون معيار تنفيذ التكرار نمط.في C# و الثعبان وقد المتكاملة في اللغة لذلك يمكنك فقط استخدام العائد عودة البيانات.

قالب نمط يشيع استخدامها في تنفيذ dotnet الأحداث إلى إعداد شروط مسبقة الرد على postconditions.تتدهور الحالة

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
}

إذا كنت على دراية مع بيثون ، تحقق من الإطار الملتوية.http://twistedmatrix.com/trac/

ولعل خير مثال ، كما أشار في أول رئيس أنماط التصميم أيضا ، جافا سوينغ API الذي ينفذ المراقب نمط.وبشكل أكثر تحديدا ، JButton (أو الفائقة AbstractButton) هو ملاحظتها الدرجة يوفر طرق لإضافة وإزالة "المراقبين" ، أو "المستمعين" كما يطلق عليها في البديل.

مركب يستخدم على نطاق واسع في واجهة المستخدم.المكونات يمكن أن تكون ورقة مكونات مثلأزرار تسميات أو المركبة مثلالألواح التي يمكن أن تحتوي على ورقة أخرى أو مكونات المركب.من وجهة نظر العميل ، جميع المكونات يعامل نفسه ، الذي يبسط إلى حد كبير رمز العميل.

الأمر نمط يستخدم في كل مكان لديك التراجع عن وظيفة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top