Seni Bina Bersih & Corak Reka Bentuk dalam Amalan · Pelajaran

Prototaip dan Kumpulan Objek

Pelajari cara menggunakan Prototaip untuk mengklon objek dan Kumpulan Objek untuk mengurus sumber boleh guna semula dengan cekap.

Pelajaran 3 daripada 412 langkah

Prototaip dan Kumpulan Objek ialah pelajaran Seni Bina Bersih & Corak Reka Bentuk dalam Amalan percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Seni Bina Bersih & Corak Reka Bentuk dalam Amalan, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Seni Bina Bersih & Corak Reka Bentuk dalam Amalan merangkumi sejumlah 4 pelajaran.

Selamat Datang: Prototaip & Kumpulan Objek

Selamat datang ke pelajaran tentang dua Corak Reka Bentuk Penciptaan yang berkuasa: Prototaip dan Kumpulan Objek.

Corak ini membantu kita mengurus penciptaan objek dengan cekap, sekali gus meningkatkan prestasi dan penggunaan sumber dalam aplikasi kita.

Memahami Corak Prototaip

Corak Prototaip berkaitan dengan penciptaan objek baharu melalui pengklonan tika sedia ada, bukannya mencipta objek baharu dari awal. Anggaplah ia seperti klon biologi!

  • Ia berguna apabila penciptaan objek adalah kompleks atau mahal.
  • Ia mengelakkan keperluan untuk subkelas kilang mencipta objek.
  • Ia membolehkan anda mencipta banyak objek serupa daripada objek 'templat'.

Salinan Cetek berbanding Salinan Mendalam

Semasa mengklon objek, amat penting untuk memahami perbezaan antara salinan cetek dengan salinan mendalam:

  • Salinan Cetek: Mencipta objek baharu, tetapi menyalin rujukan kepada objek bersarang. Perubahan pada objek bersarang klon akan menjejaskan objek asal.
  • Salinan Mendalam: Mencipta objek baharu dan mencipta salinan baharu secara rekursif bagi semua objek bersarang. Klon itu bebas sepenuhnya daripada objek asal.

Contoh Prototaip: Salinan Cetek

Dalam Java, antara muka Cloneable dan kaedah clone() digunakan. Contoh ini menunjukkan salinan cetek, iaitu perubahan pada config dalam klon turut mengubah objek asal.

class Configuration {
  String setting;
  public Configuration(String setting) {
    this.setting = setting;
  }
}

class Report implements Cloneable {
  String name;
  Configuration config;

  public Report(String name, Configuration config) {
    this.name = name;
    this.config = config;
  }

  @Override
  protected Object clone() throws CloneNotSupportedException {
    return super.clone(); // Shallow copy
  }

  public void display() {
    System.out.println("Report: " + name + ", Setting: " + config.setting);
  }
}

public class Main {
  public static void main(String[] args) {
    Configuration initialConfig = new Configuration("Default");
    Report originalReport = new Report("Monthly Sales", initialConfig);

    try {
      Report clonedReport = (Report) originalReport.clone();
      clonedReport.name = "Quarterly Sales";
      clonedReport.config.setting = "Aggregated"; // Changes original's config!

      originalReport.display();
      clonedReport.display();
    } catch (CloneNotSupportedException e) {
      e.printStackTrace();
    }
  }
}

Contoh Prototaip: Salinan Mendalam

Untuk menghasilkan salinan mendalam, anda mesti mengklon medan boleh ubah secara manual dalam kaedah clone() anda. Ini memastikan keadaan bersarang objek asal tidak terjejas.

class Configuration implements Cloneable {
  String setting;
  public Configuration(String setting) {
    this.setting = setting;
  }

  @Override
  protected Object clone() throws CloneNotSupportedException {
    return super.clone();
  }
}

class Report implements Cloneable {
  String name;
  Configuration config;

  public Report(String name, Configuration config) {
    this.name = name;
    this.config = config;
  }

  @Override
  protected Object clone() throws CloneNotSupportedException {
    Report cloned = (Report) super.clone();
    cloned.config = (Configuration) config.clone(); // Deep copy for config
    return cloned;
  }

  public void display() {
    System.out.println("Report: " + name + ", Setting: " + config.setting);
  }
}

public class Main {
  public static void main(String[] args) {
    Configuration initialConfig = new Configuration("Default");
    Report originalReport = new Report("Monthly Sales", initialConfig);

    try {
      Report clonedReport = (Report) originalReport.clone();
      clonedReport.name = "Quarterly Sales";
      clonedReport.config.setting = "Aggregated"; // Only changes cloned's config

      originalReport.display();
      clonedReport.display();
    } catch (CloneNotSupportedException e) {
      e.printStackTrace();
    }
  }
}

Bila Hendak Menggunakan Prototaip?

Pertimbangkan corak Prototaip apabila:

  • Penciptaan objek menggunakan banyak sumber (contohnya, pertanyaan pangkalan data atau pengiraan berat).
  • Anda perlu mencipta banyak objek yang serupa dengan objek sedia ada.
  • Anda mahu memisahkan kod daripada kelas konkrit objek yang perlu anda cipta.
  • Anda perlu menambah atau mengalih keluar objek secara dinamik semasa masa jalan.

Memperkenalkan Corak Kumpulan Objek

Corak Kumpulan Objek mengurus sekumpulan objek yang telah dimulakan dan sedia digunakan. Ia seperti mempunyai set alat yang sedia digunakan!

Daripada kerap mencipta dan memusnahkan objek, anda 'meminjam' objek daripada kumpulan tersebut dan 'memulangkannya' apabila selesai. Ini amat berguna untuk sumber yang mahal.

Cara Kumpulan Objek Berfungsi

Idea terasnya ialah menggunakan semula objek. Kumpulan Objek biasanya mempunyai:

  • Kumpulan: Koleksi (contohnya, senarai) objek yang tersedia.
  • Kaedah Pemerolehan: Mendapatkan objek daripada kumpulan. Jika tiada objek tersedia, kaedah ini mungkin mencipta objek baharu atau menunggu.
  • Kaedah Pelepasan: Memulangkan objek kepada kumpulan supaya tersedia untuk digunakan semula.
  • Permulaan: Kumpulan boleh mencipta terlebih dahulu sejumlah objek tertentu semasa permulaan.

Contoh Kumpulan Objek

Berikut ialah contoh mudah Kumpulan Objek yang mengurus objek DatabaseConnection. Perhatikan cara sambungan diperoleh dan kemudiannya dilepaskan kembali kepada kumpulan.

import java.util.ArrayList;
import java.util.List;

class DatabaseConnection {
  private int id;
  public DatabaseConnection(int id) {
    this.id = id;
    System.out.println("Connection " + id + " created.");
  }

  public void connect() {
    System.out.println("Connection " + id + " connected.");
  }
}

class ConnectionPool {
  private List<DatabaseConnection> availableConnections = new ArrayList<>();
  private List<DatabaseConnection> inUseConnections = new ArrayList<>();
  private int maxPoolSize;
  private int counter = 0;

  public ConnectionPool(int maxPoolSize) {
    this.maxPoolSize = maxPoolSize;
  }

  public synchronized DatabaseConnection acquireConnection() {
    if (availableConnections.isEmpty() && inUseConnections.size() < maxPoolSize) {
      DatabaseConnection newConn = new DatabaseConnection(++counter);
      inUseConnections.add(newConn);
      return newConn;
    } else if (!availableConnections.isEmpty()) {
      DatabaseConnection conn = availableConnections.remove(0);
      inUseConnections.add(conn);
      return conn;
    } else {
      System.out.println("Pool is full, no connections available.");
      return null; // Or wait, throw exception
    }
  }

  public synchronized void releaseConnection(DatabaseConnection connection) {
    if (connection != null && inUseConnections.remove(connection)) {
      availableConnections.add(connection);
      System.out.println("Connection " + connection.id + " released.");
    } else {
      System.out.println("Attempted to release unknown connection.");
    }
  }
}

public class Main {
  public static void main(String[] args) {
    ConnectionPool pool = new ConnectionPool(2);

    DatabaseConnection conn1 = pool.acquireConnection();
    if (conn1 != null) conn1.connect();

    DatabaseConnection conn2 = pool.acquireConnection();
    if (conn2 != null) conn2.connect();

    DatabaseConnection conn3 = pool.acquireConnection(); // Should say pool is full

    pool.releaseConnection(conn1);
    DatabaseConnection conn4 = pool.acquireConnection(); // Should reuse conn1
    if (conn4 != null) conn4.connect();
  }
}

Manfaat Kumpulan Objek

Penggunaan Kumpulan Objek menawarkan kelebihan yang ketara:

  • Prestasi: Mengurangkan beban penciptaan objek dan pengumpulan sampah.
  • Pengurusan Sumber: Mengawal bilangan maksimum objek aktif dan mengelakkan kehabisan sumber.
  • Kependaman Dikurangkan: Objek tersedia serta-merta tanpa kelewatan penghasilan tika.
  • Kestabilan Dipertingkatkan: Penggunaan sumber yang boleh dijangka.

Semakan Pantas: Corak Reka Bentuk

Anda mempunyai objek ImageProcessor kompleks yang mengambil masa lama untuk dimulakan kerana memuatkan fail konfigurasi yang besar. Anda perlu mencipta banyak tika pemproses ini, setiap satunya dengan parameter yang sedikit berbeza tetapi berdasarkan persediaan awal yang sama. Apakah corak reka bentuk yang paling sesuai untuk mencipta tika ImageProcessor baharu ini dengan cekap?

Imbas Kembali: Prototaip & Kumpulan Objek

Syabas! Dalam pelajaran ini, anda telah mempelajari dua corak penciptaan yang berkuasa:

  • Prototaip: Mencipta objek baharu dengan mengklon objek sedia ada, berguna untuk penghasilan tika objek yang mahal atau kompleks. Ingat perbezaan antara salinan cetek dengan salinan mendalam!
  • Kumpulan Objek: Mengurus koleksi objek yang boleh digunakan semula, sekali gus mengurangkan beban penciptaan dan pemusnahan sumber mahal seperti sambungan pangkalan data.

Corak ini penting untuk membina aplikasi yang berprestasi tinggi dan menggunakan sumber dengan cekap!

Percuma untuk bermula

Pelajari Seni Bina Bersih &amp; Corak Reka Bentuk dalam Amalan dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
12
Pelajaran
48

Soalan Lazim

Adakah pelajaran “Prototaip dan Kumpulan Objek” percuma?

Ya — teks penuh “Prototaip dan Kumpulan Objek” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Seni Bina Bersih &amp; Corak Reka Bentuk dalam Amalan, tingkat taraf kepada CoddyKit PRO. Kursus Seni Bina Bersih &amp; Corak Reka Bentuk dalam Amalan merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Prototaip dan Kumpulan Objek”?

Pelajari cara menggunakan Prototaip untuk mengklon objek dan Kumpulan Objek untuk mengurus sumber boleh guna semula dengan cekap. Anda berlatih Seni Bina Bersih &amp; Corak Reka Bentuk dalam Amalan menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Seni Bina Bersih &amp; Corak Reka Bentuk dalam Amalan?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Seni Bina Bersih &amp; Corak Reka Bentuk dalam Amalan di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Prototaip dan Kumpulan Objek” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Seni Bina Bersih &amp; Corak Reka Bentuk dalam Amalan ini?

Ya. Setiap pelajaran Seni Bina Bersih &amp; Corak Reka Bentuk dalam Amalan menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Singleton dan Kaedah Kilang
  2. Kilang Abstrak dan Pembina
  3. Prototaip dan Kumpulan Objek
  4. Suntikan Kebergantungan sebagai Teknik Penciptaan
← Kembali ke Seni Bina Bersih &amp; Corak Reka Bentuk dalam Amalan