Cara menggunakan corak reka bentuk prototaip di .NET

Corak reka bentuk digunakan untuk menyelesaikan masalah dan kerumitan berulang dalam pembangunan perisian. Corak prototaip tergolong dalam kategori corak reka bentuk kreasi dan digunakan untuk membuat klon objek. Corak reka bentuk penciptaan berkaitan dengan pembuatan objek dan menguruskan proses pembuatan objek dalam aplikasi anda. Contoh khas corak reka bentuk yang termasuk dalam kategori corak penciptaan merangkumi corak abstrak, pembina, kaedah kilang, prototaip, dan corak tunggal.

Corak reka bentuk prototaip membolehkan anda membuat contoh baru kelas dari contoh yang ada. Anda boleh memanfaatkan corak reka bentuk ini untuk membuat klon objek apabila proses pembuatan objek itu sendiri adalah urusan yang mahal. Perhatikan bahawa pengklonan didefinisikan sebagai proses membuat salinan objek yang tepat. Terdapat dua jenis pengklonan: salinan dalam dan salinan cetek.

Salinan cetek berbanding pengklonan salinan dalam

Salinan cetek dilakukan menggunakan kaedah Object.MemberwiseClone dan menyalin bidang non-statik objek, sedangkan salinan dalam digunakan untuk menyalin kedua-dua jenis rujukan dan nilai dan memberi anda contoh yang jelas pada objek. Anda boleh mengetahui salinan lebih dalam dan cetek dari artikel saya di sini.

Peserta (kelas dan objek) dalam pelaksanaan khas pola prototaip merangkumi yang berikut:

  • Prototaip - ini menentukan antara muka untuk pengklonan itu sendiri
  • ConcretePrototype - ini menentukan jenis yang melaksanakan operasi untuk pengklonan itu sendiri
  • Pelanggan - ini menentukan pengguna yang dapat membuat contoh baru dengan mengklon prototaip

Mengingat ini, kami akan melaksanakan corak prototaip di sini menggunakan tiga jenis. Ini termasuk yang berikut:

  • Pelanggan
  • Pengurus Pelanggan
  • Jenis Pelanggan

Buat kelas abstrak prototaip di .NET

Rujuk kelas CustomerPrototype yang diberikan di bawah.

[Bersiri ()]

CustomerPrototype kelas abstrak awam

    {

        Pelanggan abstrak awamPrototaip Clone (bool performDeepCopy);

    }

Kelas CustomerPrototype bersifat abstrak dan mengandungi satu kaedah abstrak bernama Clone. Kaedah ini menerima parameter boolean bernama performDeepCopy. Sekiranya parameter yang disampaikan kepadanya benar, ia akan menghasilkan salinan dalam, salinan cetek sebaliknya.

Buat kelas prototaip konkrit di .NET

Kelas CustomerManager diberikan seterusnya. Ia mengandungi Kamus yang menyimpan contoh kelas Pelanggan (hanya kelas POCO lain) di dalamnya. Ini juga berisi pengindeks bernama CustomerPrototype. Harta set pengindeks digunakan untuk menyimpan data ke dalam contoh Kamus bernama pelanggan.

  CustomerManager kelas awam

    {

     pelanggan Kamus persendirian = Kamus baru ();

        Pelanggan awamProtaip ini [int index]

        {

            dapatkan {pelanggan kembali [indeks]; }

            tetapkan {pelanggan.Add (indeks, nilai); }

        }

    }

Buat kelas pelanggan prototaip di .NET

Kelas Pelanggan diberikan seterusnya. Ia mengandungi dua sifat, iaitu FirstName dan LastName, dan dua kaedah, Clone dan DeepCopy.

[Bersiri ()]

    Pelanggan kelas awam: CustomerPrototype

    {

        rentetan awam FirstName

        {

            dapatkan; tetapkan;

        }

        rentetan umum Nama Akhir

        {

            dapatkan; menetapkan;

        }

        menimpa umum CustomerPrototype Clone (bool deepClone)

        {

            tukar (deepClone)

            {

                kes benar:

                    kembalikan ini.DeepCopy (ini) sebagai CustomerPrototype;

                kes salah:

                    kembalikan ini.MemberwiseClone () sebagai CustomerPrototype;

                lalai:

                    kembalikan ini.MemberwiseClone () sebagai CustomerPrototype;

            }

        }

        T DeepCopy peribadi (T obj)

        {

           // Tulis kod di sini untuk membuat salinan mendalam.

        }

     }

Saya telah melangkau kod sumber kaedah DeepCopy dalam penyenaraian kod di atas kerana ia sudah tersedia dalam artikel saya sebelumnya di sini.

Buat salinan mendalam objek di .NET

Coretan kod berikut menggambarkan bagaimana anda dapat memanfaatkan kelas CustomerManager yang kami buat sebelumnya untuk melakukan salinan mendalam.

CustomerManager customerManager = CustomerManager baru ();

Pelanggan custObj1 = Pelanggan baru ();

custObj1.FirstName = "Joydip";

custObj1.LastName = "Kanjilal";

customerManager [0] = custObj1;

Pelanggan custObj2 = Pelanggan baru ();

custObj2.FirstName = "Stephen";

custObj2.LastName = "Smith";

customerManager [1] = custObj2;

Pelanggan pelanggan = customerManager [0]. Klon (benar) sebagai Pelanggan;

Perhatikan bahawa kami telah menyampaikan "true" sebagai parameter ke metode Clone untuk melakukan salinan dalam.

Buat salinan cetek objek di .NET

Begitu juga, anda dapat memberikan "false" sebagai parameter ke metode yang sama untuk melakukan salinan cetek. Inilah cara anda dapat mencapainya.

Pelanggan pelanggan = customerManager [0]. Klon (palsu) sebagai Pelanggan;

Akhirnya, berikut adalah kod lengkap kaedah Utama untuk rujukan anda.

kekosongan statik Utama (string [] args)

      {

      CustomerManager customerManager = CustomerManager baru ();

      Pelanggan custObj1 = Pelanggan baru ();

      custObj1.FirstName = "Joydip";

      custObj1.LastName = "Kanjilal";

      customerManager [0] = custObj1;

      Pelanggan custObj2 = Pelanggan baru ();

      custObj2.FirstName = "Stephen";

      custObj2.LastName = "Smith";

      customerManager [1] = custObj2;

      Pelanggan pelanggan = customerManager [0]. Klon (benar) sebagai Pelanggan;

      Konsol.ReadKey ();

      }