"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > النموذج الأولي

النموذج الأولي

تم النشر بتاريخ 2024-11-08
تصفح:891

Prototype

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

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

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

دعونا نفهم ذلك بمثال لكائن الشكل الذي يمكن استنساخه.

شكل

public class Shape implements Cloneable {
    private String id;
    protected String shape;

    @Override
    public String toString() {
        return "Shape [id="   id   ", shape="   shape   "]";
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getShape() {
        return shape;
    }

    @Override
    public Object clone(){
        Object clone = null;
        try {
            clone = super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return clone;
    }
}

فصول الأطفال

public class Rectangle extends Shape {

    public Rectangle(){
        shape = "Rectangle";
    }
    public void draw(){
       System.out.println("calling draw() of Rectangle shape");
    }
}

public class Circle extends Shape {
    public Circle(){
        shape = "Circle";
    }
    public void draw(){
        System.out.println("Calling draw in Circle method");
    }
}

مخبأ

public class ShapeCache {
    public static HashMap cache = new HashMap();

    public static Shape cloneObject(String id){
        return (Shape)cache.get(id);
    }
    public static void addShapeInCache(Shape shape){
        cache.put(shape.getId(),shape);
    }

}

رئيسي

public class Main {
    public static void main(String args[]){
        Shape circle = new Circle();
        circle.setId("1");
        Shape rectangle = new Rectangle();
        rectangle.setId("2");

        ShapeCache.addShapeInCache(rectangle);
        ShapeCache.addShapeInCache(circle);

        Shape copyShape1 = (Shape) ShapeCache.cache.get(circle.getId());
        Shape copyShape2 =(Shape) ShapeCache.cache.get(rectangle.getId());

        System.out.println(copyShape1);
        System.out.println(copyShape2);
    }

}

الإخراج:

Shape [id=1, shape=Circle]
Shape [id=2, shape=Rectangle]

النقاط الرئيسية

  • يتبع كل من الدائرة والمستطيل مبدأ استبدال ليسكوف (مبدأ SOLID) الذي ينص على أن يجب أن يكون الكائن قابلاً للاستبدال بأنواعه الفرعية دون التأثير على صحة الكود.
  • يتم إنشاء نسخة سطحية فقط من كائن الشكل.
بيان الافراج تم نشر هذه المقالة على: https://dev.to/prashantrmishra/prototype-15hn?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3