يجب أن أستخدم المتغيرات العالمية أو اجتياز المتغيرات في جافا؟

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

سؤال

أخلق لعبة SIM قائمة على البلاط 2D. لدي مجموعة ثنائية الأبعاد من Gridsquares، والتي يتم الوصول إليها وتتغير من العديد من الفئات والأساليب المختلفة. هل يجب علي اجتياز مجموعة ثنائية الأبعاد من Gridsquares في كل مرة، أو جعله عالميا؟ ما هي أفضل الممارسات؟

كنت أفكر، هل سيكون خيارا لإنشاء فئة تحتوي على مجموعة من المتغيرات التي يمكن أن تمتد جميع الفصول؟ هل هذه فكرة جيدة أو سيئة / لممارسة جيدة؟

ما زلت جديد إلى حد ما على جافا حتى ما زلت أتعلم الكثير!

شكرا لك مقدما.

أمر

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

المحلول

يجب ألا تصمم من حيث هيكل البيانات. جافا له لغة موجهة للكائنات. حاول التفكير في مشكلتك ككائنات تتفاعل. انها ليست صفيف 2D؛ إنه كائن لوحة. قم ببناء السلوك لمعالجة دولته في المشكلة وإخفاء حقيقة أنك قد اخترت صفيف ثنائي الأبعاد.

ليس لدي كل تفاصيل لوحة عملت، لكنها ستبدأ مثل هذا:

public class Board
{
    // This is what you're passing around now; Board hides it.
    // Square is the abstraction of a position on the Board
    private Square[][] grid;

    public Board(int nRows, int nCols)        
    {
       this.grid = new Square[nRows][];
       for (int i = 0; i < this.grid[i].length; ++i)
       {
           this.grid[i] = new Square[nCols];
       }
    }

    // Now add methods for adding Pieces to the Board, rules for moving them, etc.
} 

نصائح أخرى

اجتيازها في منشئين وعقدهم في متغيرات الأعضاء.

إذا تم الوصول إليهم من العديد من الأماكن، فمن المحتمل أن يكون لديك مشكلة في التصميم.

إذا كان لديك المؤكد ستحصل فقط على مجموعة واحدة من Gridsquares "من أي وقت مضى، يمكنك دائما استخدام نمط Singleton، مما يجعل ESSENTAILLY جعلها عالمية.

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

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

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

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

في كل فصل تحتاج إلى الوصول إلى الصفيف، يمكنك تمرير GridsquareSacessor كمعلمة على المنشئ والحفاظ عليها مخزنة في متغير محلي.

أنا شخصيا لا أحب المفردات لأنها تجعل من الصعب جدا اختبار رمز ...

إذا كان التعليمات البرمجية الخاصة بك مؤلا، فتأكد من جعل مجموعة 2D متزامنة.

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