في Java ، هل ما زلت لا تتغير كائنات جديدة مقابلة لتشكيل الفصل؟
مع وجود المزيد من المشاريع في متناول اليد ، ستزداد كمية كتابة التعليمات البرمجية بشكل طبيعي ، وسوف تشعر تدريجياً بنمط التصميم.
كيفية جعل إجراءات إنشاء مثيل للطبقة المكتوبة ، والتماسك العالي ، والاقتران المنخفض ، والحصول على قدرات توسع معينة؟
تحاول هذه المقالة البدء ببعض الرموز الحية لتقديم فصول خلوية مختلفة للجافا للجميع.
الكود التالي مأخوذ من تنفيذ رمز المصدر com.google.zxing:
Public Bitmatrix Encode (محتويات السلسلة ، تنسيق barcodeformat ، عرض int ، ارتفاع int ، خريطة <EncodeHintType ،؟> تلميحات) رميات Writerexception {Object Constr ؛ Switch (format.ordinal ()) {case 1: writer = new aztecwriter () ؛ استراحة؛ الحالة 2: الكاتب = codabarwriter جديد () ؛ استراحة؛ الحالة 3: الكاتب = code39Writer () ؛ استراحة؛ الحالة 4: الحالة 10: الحالة 13: الحالة 14: الافتراضي: رمي جديد غير unalfalArgumentException ("لا يوجد تشفير متاح للتنسيق" + تنسيق) ؛ الحالة 5: الكاتب = code128Writer () ؛ استراحة؛ الحالة 6: الكاتب = New DatamatrixWriter () ؛ استراحة؛ الحالة 7: الكاتب = New Ean8Writer () ؛ استراحة؛ الحالة 8: الكاتب = New Ean13Writer () ؛ استراحة؛ الحالة 9: الكاتب = جديد itfwriter () ؛ استراحة؛ الحالة 11: كاتب = جديد pdf417writer () ؛ استراحة؛ الحالة 12: الكاتب = QRCODEWRITER الجديد () ؛ استراحة؛ الحالة 15: كاتب = جديد upcawriter () ؛ استراحة؛ الحالة 16: الكاتب = new upceWriter () ؛ } إرجاع ((كاتب) كاتب) .encode (المحتويات ، التنسيق ، العرض ، الارتفاع ، تلميحات) ؛ }يشبه الباركودفورات:
التعداد العام barcodeformat {aztec ، codabar ، code_39 ، code_93 ، code_128 ، data_matrix ، ean_8 ، ean_13 ، itf ، maxicode ، pdf_417 ، qr_code ، rss_14 ، rss_expanded ، upc_a ، upc_eex. barcodeformat () {}} تتمثل الوظيفة التي يوفرها الرمز المصدري في إخراج المعلومات في مصفوفة بت عبر عدة أنواع مختلفة من مشاهد الباركود ، ثم إخراجها إلى الصورة لتشكيل أنواع مختلفة من الرموز الباركية التي يمكن رؤيتها في كل مكان.
bitmatrix bitmatrix = new multiformatwriter (). encode (_text ، barcodeformat.qr_code ، qrcodewidth ، qrcodeheight ، تلميحات) ؛
MatrixToImageWriter.Writetofile (bitmatrix ، qrcodeformat ، qrcodefile) ؛
يستخدم مؤلف التعليمات البرمجية المصدرية فئة تعداد الميزة الجديدة التي تم تقديمها في JDK 1.5 هنا وكتب فئة الباركودفورت ، والتي تحدد خصائص أنواع مختلفة من الباركود.
استدعاء multiformatwriter.encode () لإنشاء فئة محددة وفقًا لرقم التسلسل للمعلمة barcodeformat.xx في فئة التعداد.
Switch (format.ordinal ()) {case 1: writer = new aztecwriter () ؛ استراحة؛ الحالة 2: الكاتب = codabarwriter جديد () ؛ استراحة؛ الحالة 3: الكاتب = code39Writer () ؛ استراحة؛ ............ تقوم فصول الكاتب الباركود هذه بتنفيذ طريقتين encode () لكاتب الواجهة التجريدية.
الكاتب الواجهة العامة {bitmatrix encode (String var1 ، barcodeformat var2 ، int var3 ، int var4) remsbreexception ؛ Bitmatrix Encode (String var1 ، barcodeformat var2 ، int var3 ، int var4 ، map <EncodeHintType ،؟> var5) رميات writerexception ؛}تقوم فئة Wirter باركود باركود محددة تنفيذ منطق مختلف بناءً على أنواع مختلفة من قواعد الباركود.
لا يحتاج المستخدمون إلى إيلاء الكثير من الاهتمام للتنفيذ الداخلي. إنهم بحاجة إلى إنشاء نوع الباركود الذي يحتاجونه إلى اختيار واستخدام نوع الباركود المناسب. يتم تنفيذ الأمثلة أعلاه في رمز الاستجابة السريعة.
دعونا نلقي نظرة على رمز الطريقة لفئة الاستئصال الديناميكي في أعمال الويب الكلاسيكية MVC Framework:
التكوين الثابت الخاص getDefaultConfiguration () {if (defaultimpl == null) {defaultImpl = new DefaultConfiguration () ؛ حاول {String className = getString ("webwork.configuration") ؛ if (! className.equals (defaultImpl.getClass (). getName ())) {try {defaultimpl = (configuration) objectFactory.getObjectFactory (). BuildBean (thread.currentThRead (). } catch (استثناء e) {log.error ("لا يمكن إنشاء تكوين" ، e) ؛ }} إرجاع defaultimpl ؛ } catch (alfictalArgumentException localileGalArgumentException) {}}}رمز المصدر مأخوذ من Webwork-Core. قد لا يسمع العديد من المتفرجين عن أعمال الويب ، ولكن يجب أن تكون الدعامات معروفة. يتم إعادة كتابة Struts2 Core من WebWork.
تتمثل الوظيفة التي يوفرها رمز المصدر أعلاه في إنشاء فئة قراءة ملف التكوين المحددة بواسطة المستخدم ، والتعريف في ملف التكوين.
يستخدم مؤلف التعليمات البرمجية المصدر Thread.currentThread ().
سلسلة مفوضية من Loader: SystemClassloader -> ExtensClassloader -> BootstrapClassloader
يمكن لمحمل الفئة على الجانب الأيسر من سلسلة التفويض استخدام الفئة التي تم تحميلها بواسطة جهاز التحميل على اليمين بشكل طبيعي. تتمثل آلية تحميل الفصل في تحديد ما إذا كانت تقوم بتحميل الفصل ، ولا تسأل العليا.
تتوافق محملات الفئة الثلاثة هذه مع أولوية المترجم والمسارات المختلفة للعثور على ملف الفئة:
سيبدأ class.forname () المستخدمة في المشاريع اليومية في السؤال من bootstrapclassloader ، وهو الأكثر استهلاكًا للموارد.
يستخدم مؤلف الكود المصدر محمل فئة مؤشرات الترابط هنا ، المقابل لـ SystemClassloader ، وهو بلا شك أعلى كفاءة.