ما هي بعض الأمثلة على الحياة الحقيقية من أنماط التصميم المستخدمة في البرنامج [مغلقة]
-
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) هو ملاحظتها الدرجة يوفر طرق لإضافة وإزالة "المراقبين" ، أو "المستمعين" كما يطلق عليها في البديل.
مركب يستخدم على نطاق واسع في واجهة المستخدم.المكونات يمكن أن تكون ورقة مكونات مثلأزرار تسميات أو المركبة مثلالألواح التي يمكن أن تحتوي على ورقة أخرى أو مكونات المركب.من وجهة نظر العميل ، جميع المكونات يعامل نفسه ، الذي يبسط إلى حد كبير رمز العميل.
الأمر نمط يستخدم في كل مكان لديك التراجع عن وظيفة.