سؤال

هل يمكن لأي أحد أن يشرح الفرق بين أنماط المصنع والاستراتيجية؟

بالنسبة لي كلاهما يبدوان متشابهين بخلاف فئة المصنع الإضافية (التي تنشئ كائنًا من المنتج في أنماط المصنع)

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

المحلول

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

في الواقع، يمكن استخدام الاثنين معًا.على سبيل المثال، قد يكون لديك مصنع يقوم بإنشاء كائنات عملك.وقد يستخدم استراتيجيات مختلفة بناءً على وسيلة الثبات.إذا تم تخزين بياناتك محليًا في XML، فسيتم استخدام إستراتيجية واحدة.إذا كانت البيانات بعيدة في قاعدة بيانات مختلفة، فستستخدم قاعدة بيانات أخرى.

نصائح أخرى

ونمط استراتيجية يسمح لك polymorphically تغيير السلوك من فئة.

ونمط مصنع يسمح لك لتغليف إنشاء الكائن.

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

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

  • نمط (طريقة) المصنع.

إنشاء حالات ملموسة فقط.قد تؤدي الوسائط المختلفة إلى كائنات مختلفة.يعتمد ذلك على المنطق وما إلى ذلك.

  • نمط الاستراتيجية.

قم بتغليف الخوارزمية (الخطوات) لتنفيذ الإجراء.لذا يمكنك تغيير الإستراتيجية واستخدام خوارزمية أخرى.

على الرغم من أن كلاهما يبدو متشابهًا جدًا، إلا أن الغرض مختلف نوعًا ما، فأحد الأغراض هو إنشاء الآخر وهو تنفيذ إجراء ما.

لذا.إذا تم إصلاح طريقة المصنع الخاصة بك، فقد يكون الأمر كما يلي:

 public Command getCommand( int operatingSystem ) { 
      switch( operatingSystem ) { 
           case UNIX    :
           case LINUX   : return new UnixCommand();
           case WINDOWS : return new WindowsCommand();
           case OSX     : return new OSXCommand();
       }
  }

لكن لنفترض أن مصنعك يحتاج إلى إنشاء أكثر تقدمًا أو ديناميكية.يمكنك إضافة إستراتيجية إلى طريقة المصنع وتغييرها دون الحاجة إلى إعادة الترجمة، وقد تتغير الإستراتيجية في وقت التشغيل.

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

وعلى سبيل المثال إذا كنت تريد أزرار مع لينكس الشكل والمظهر:

ButtonCreationFactory myFactory = new LinuxButtonCreationFactory();
Button button1 = myFactory.createButton(...);

وأو إذا كنت تريد أزرار ويندوز

ButtonCreationFactory myFactory = new WindowsButtonCreationFactory();
Button button1 = myFactory.createButton(...);

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

المصنع (وطريقة المصنع التي يتم إرجاعها بواسطة المصنع):

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

الق نظرة على هذا مقالة ويكيبيديا و جافا تمت زيارتها المادة

نمط الإستراتيجية:

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

مثال:

يمكنك تكوين إستراتيجية الخصم لعنصر معين (تذكرة AirFare أو عنصر ShoppingCart).في هذا المثال، ستقدم خصمًا بنسبة 25% على أحد العناصر خلال الفترة من يوليو إلى ديسمبر ولن يكون هناك خصم على العنصر خلال الفترة من يناير إلى يونيو.

المنشورات ذات الصلة:

مثال عالمي حقيقي لنمط الإستراتيجية

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

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

لتمديد على ما قال أوسكار وفي إشارة إلى رمز له:

ووgetCommand هو مصنع وUnixCommand، WindowsCommand وOSXCommand الطبقات هي استراتيجيات

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

public Command getCommand( int operatingSystem ) {        
   return commandTable.get(operatingSystem); 
}

...

public class WindowsCommand implements Command {
    ...
    static {
        CommandTable.getInstance().registerCommand(WIN_COMMAND_ID, new WindowsCommand());
    }

}

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

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

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

والاستراتيجية: ".. عرف عائلة مكونة من الخوارزميات، تغلف كل واحد، وجعلها قابلة للتبديل استراتيجية تتيح خوارزمية تختلف بشكل مستقل من العملاء الذين يستخدمون ذلك"

والطريقة مصنع ". تحديد واجهة لإنشاء كائن، ولكن دعونا الفئات الفرعية التي تقرر فئة لمثيل الطريقة مصنع يتيح لمثيل الطبقة تؤجل إلى الفئات الفرعية"

وهنا شرح مفصل عن النوايا والاختلافات بين هذه الأنماط اثنين: <لأ href = "http://www.deadschool.com/article/difference-between-factory-method-and-strategy-design- أنماط "يختلط =" نوفولو "> الفرق بين الطريقة مصنع والاستراتيجية أنماط التصميم

ونمط مصنع هو نمط الإبداعية و الذي يتم إنشاؤه مع الخصائص المحددة (السلوك). بينما في وقت التشغيل بعد إنشاء ش cn't تغييره من خصائص (السلوك). حتى إذا ش حاجة خصائص مختلفة (السلوك) عليك أن حذف الكائن وإنشاء كائن جديد مع الخصائص المطلوبة (السلوك). وهي ليست GUD. بينما في حالة من نمط استراتيجية ش يمكن تغيير خصائص (السلوك) في وقت التشغيل.

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