سؤال

قد يبدو كما لو كان هذا هو السؤال ساذجا, ولكن يرجى تتحمل معي - أعدك أنني قرأت الوظائف ذات الصلة ( ، GOF الكتاب).

بعد كل ما قرأت, أنا لا تزال لم يكن لديك واضحة عند استخدام مجردة مصنع, مصنع أو أسلوب البناء.وأعتقد أنه أخيرا سوف تغرق في بعد رؤية مثال بسيط من المشكلة الذي هو أفضل اقترب من القول ، باني وسيكون من الواضح سخيفة لاستخدام القول ، مصنع مجردة.

يمكن أن توفر لك مثال بسيط حيث يمكنك بوضوح استخدام نمط واحد دون الآخرين ؟

أنا أفهم أنه قد تختزل إلى مسألة رأي إذا كان مثال بسيط جدا, ولكن أنا متفائل أنه إذا كان أي شخص يمكن أن يكون الشخص في ذلك.

شكرا

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

المحلول

يساعدك المنشئ في بناء كائن معقد. مثال على ذلك StringBuilder صف دراسي (جافا, ج#) ، الذي يبني قطعة السلسلة النهائية قطعة. مثال أفضل هو uricomponentsbuilder في الربيع ، مما يساعدك على بناء URI.

تمنحك طريقة المصنع كائنًا كاملاً في طلقة واحدة (على عكس المنشئ). تحدد الفئة الأساسية طريقة مجردة واحدة تُرجع مرجع واجهة (أو فئة سوبر) ، وتشويش إنشاء كائن ملموس للكائن إلى الفئات الفرعية.

المصنع التجريدي هو واجهة (أو فئة مجردة) لإنشاء العديد من الكائنات ذات الصلة المختلفة. مثال جيد (في .NET) هو DbProviderFactory الفئة ، التي تعمل على إنشاء كائنات ذات صلة (الاتصالات ، الأوامر ، ...) بمزود قاعدة بيانات معينة (Oracle ، SQL Server ، ...) ، اعتمادًا على تنفيذها الملموس.

نصائح أخرى

باني

// Builder encapsulates construction of other object. Building of the object can be done in multiple steps (methods)
public class ConfigurationBuilder
{
  // Each method adds some configuration part to internally created Configuration object
  void AddDbConfiguration(...);
  void AddSmtpConfiguration(...);
  void AddWebServicesConfiguration(...);
  void AddWebServerConfiguration(...);

  // Returns built configuration
  Configuration GetConfiguration();
}

طريقة المصنع

// Factory method is declared in base class or interface. Subclass defines what type is created by factory method.
public interface ICacheProvider
{
  ISession CreateCache(); // Don't have to return new instance each time - such decission is part of implementation in derived class.
}

public class InMemoryCacheProvider : ICacheProvider
{ ... }

public class DbStoredCacheProvider : ICacheProvider
{ ... }

// Client code
ICacheProvider provider = new InMemoryCacheProvider
ICache cache = provider.CreateCache(); 

مصنع مجردة

// Abstract factory defines families of platform classes - you don't need to specify each platform class on the client.
public interface IDbPlatform
{
  // It basically defines many factory methods for related classes
  IDbConnection CreateConnection();
  IDbCommand CreateCommand();
  ...
}

// Abstract factory implementation - single class defines whole platform
public class OraclePlatfrom : IDbPlatform
{ ... }

public class MySqlPlatform : IDbPlatform
{ ... }

// Client code:
IDbPlatform platform = new OraclePlatform();
IConnection connection = platform.CreateConnection(); // Automatically Oracle related
...

مجردة مصنع, مصنع أسلوب البناء :كل هذه الأنماط creational الأنماط التي أنماط التصميم التي تتعامل مع كائن إنشاء آليات, ، في محاولة لخلق الكائنات بطريقة مناسبة للحالة.

مصنع الطريقة:

  1. ويعرف واجهة لخلق كائن, ولكن اسمحوا فرعية تقرر أي فئة مثيل
  2. نقوم بإنشاء كائن من دون تعريض خلق المنطق إلى العميل والرجوع إلى كائن تم إنشاؤه حديثا باستخدام واجهة مشتركة ( أو فئات مجردة)
  3. يوفر فضفاضة اقتران من خلال القضاء على الحاجة إلى ربط التطبيق فئات محددة في التعليمات البرمجية.رمز يتفاعل فقط مع واجهة أو فئة مجردة
  4. وقد استخدم الميراث أو دون تصنف لتحقيق الغرض

    الرئيسية ملاحظة:سوف تقوم بإنشاء واجهة محددة لتنفيذ هذه الواجهات.في طريقة مصنع ، حسب الحالة ، سوف تحصل على الخرسانة تنفيذ واجهة مشتركة.

مصنع مجردة:

  1. توفر واجهة لإنشاء أسر ذات الصلة أو تعتمد الكائنات دون تحديد فئات محددة
  2. التسلسل الهرمي الذي تقوم بتغليف:العديد من ممكن "منصات"`, وبناء مجموعة من "المنتجات"
  3. مصنع مجردة الطبقات غالبا ما تنفذ مع أساليب المصنع, ولكن يمكن أيضا أن تنفذ باستخدام النموذج

باني:

  1. باني نمط يبني كائن معقد باستخدام أشياء بسيطة باستخدام نهج خطوة بخطوة
  2. استبدال طريقة مصنع/مصنع مجردة في هذا السيناريو :الكثير من الحجج تمريرة من البرنامج العميل إلى المصنع الفئة التي يمكن أن تكون عرضة خطأ
  3. بعض المعلمات قد تكون اختيارية خلافا في مصنع القوات إرسال جميع المعلمات

مبادئ توجيهية باني نمط تصميم في جافا

  1. جعل ساكنة متداخلة فئة تسمى باني داخل الطبقة التي وجوه سيتم بناء من قبل باني
  2. منشئ فئة سوف يكون بالضبط نفس مجموعة من الحقول كما الطبقة الأصلية
  3. منشئ الفئة سوف يعرض طريقة إضافة المكونات.كل طريقة سيعود نفسه منشئ الكائن.باني سوف يكون المخصب مع كل استدعاء الأسلوب.
  4. باني.بناء() طريقة نسخ جميع باني مجال القيم إلى الدرجة الفعلية والعودة كائن من الدرجة البند
  5. البند الدرجة (الدرجة التي نحن بصدد إنشاء منشئ) يجب أن يكون خاص منشئ إنشاء كائن من بناء() طريقة ومنع الخارج للوصول إلى المنشئ.

الوظائف ذات الصلة:

أنماط التصميم:مصنع vs طريقة مصنع مقابل مصنع مجردة

حفظ باني في فئة منفصلة (بطلاقة واجهة)

روابط مفيدة:

sourcemaking تصميم أنماط

يستخدم نمط المصنع التجريدي التصنيف الفرعي (المصانع) لإنتاج كائنات أخرى (غير العوامل). يتصور مصنع الملخص أيضًا أن الأشياء المنتجة تنتمي إلى التسلسلات الهرمية المتوازية (على سبيل المثال للتعامل مع استقلال النظام الأساسي ، التسلسل الهرمي لكل منصة).

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

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

الثلاثة متشابهون للغاية ، لأنهم جميعًا يستخدمون التصنيف الفرعي. إن التصنيف الفرعي هو الجودة المتميزة لهم جميعًا ، والتي تخفي الاختلافات الدقيقة (الموضحة أعلاه) وبالتالي فإن الكثير من الناس يجدون صعوبة في رؤية الاختلافات.

المصنع التجريدي مفيد بشكل خاص للتنمية التي تحركها الاختبار وتقليل الاقتران.

على سبيل المثال ، في C#:

public class Worker
{
    public IConsumerFactory Factory { get; set; }

    private IResource resource;

    public DoWork()
    {
        IConsumer consumer = Factory.CreateConsumer();
        consumer.Consume(resource);
    }
}

public interface IConsumerFactory
{
    IConsumer CreateConsumer();
}

public interface IConsumer
{
    void Consume(IResource resource);
}

public class DefaultConsumerFactory : IConsumerFactory
{
    public IConsumer CreateConsumer()
    {
        return new DefaultConsumer();
    }
}

public class DefaultConsumer : IConsumer
{
    public void Consume(IResource resource)
    {
      ... Do Work ...
    }
}

وبهذه الطريقة ، يمكنك استخدام حقن التبعية لحقن التطبيقات الافتراضية لرمز الإنتاج ، ثم يمكنك بسهولة السخرية من المصنع والكائنات التي ينشئها.

  • نمط طريقة المصنع - عندما تريد بناء عائلة من الأشياء المعقدة.
  • نمط Builder الكائن - عندما تريد السماح للمستخدم بالضغط على تطبيقه المخصص في إطار العمل الخاص بك

يرجى زيارة عنوان URL التالي لمزيد من التفاصيل.

http://xeon2k.wordpress.com

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