.NET'te prototip tasarım deseni nasıl kullanılır?

Tasarım kalıpları, yazılım geliştirmede tekrar eden sorunları ve karmaşıklıkları çözmek için kullanılır. Prototip desen, yaratıcı tasarım desenleri kategorisine aittir ve bir nesnenin klonunu oluşturmak için kullanılır. Yaratıcı tasarım kalıpları, uygulamanızda nesne oluşturma ve nesne oluşturma sürecini yönetme ile ilgilidir. Yaratma kalıpları kategorisine giren tasarım kalıplarının tipik örnekleri arasında soyut fabrika, inşaatçı, fabrika yöntemi, prototip ve tekli kalıplar bulunur.

Prototip tasarım deseni, mevcut bir örnekten yeni bir sınıf örneği oluşturmanıza olanak tanır. Nesne oluşturma sürecinin kendisi maliyetli bir iş olduğunda, bir nesnenin bir klonunu oluşturmak için bu tasarım modelinden yararlanabilirsiniz. Klonlamanın, bir nesnenin tam bir kopyasını oluşturma işlemi olarak tanımlandığını unutmayın. İki tür klonlama vardır: derin kopya ve sığ kopya.

Sığ kopya ve derin kopya klonlama

Yüzeysel kopyalama, Object.MemberwiseClone yöntemi kullanılarak gerçekleştirilir ve bir nesnenin statik olmayan alanlarını kopyalarken, derin kopya hem referans hem de değer türlerini kopyalamak için kullanılır ve size bir nesne üzerinde farklı bir örnek verir. Buradaki makalemden daha derin ve sığ kopya öğrenebilirsiniz.

Prototip modelinin tipik bir uygulamasındaki katılımcılar (sınıflar ve nesneler) şunları içerir:

  • Prototip - bu, kendini klonlamak için bir arayüz tanımlar
  • ConcretePrototype - bu, kendini klonlamak için işlemi uygulayan bir türü tanımlar
  • İstemci - bu, bir prototip klonlayarak yeni bir örnek oluşturabilen tüketiciyi tanımlar

Bunu akılda tutarak, prototip modelini burada üç tür kullanarak uygulayacağız. Bunlar aşağıdakileri içerir:

  • Müşteri
  • Müşteri Yöneticisi
  • MüşteriPrototipi

.NET'te bir prototip soyut sınıfı oluşturun

Aşağıda verilen CustomerPrototype sınıfına bakın.

[Serileştirilebilir()]

public abstract class CustomerPrototype

    {

        public abstract CustomerPrototype Clone (bool performDeepCopy);

    }

CustomerPrototype sınıfı doğası gereği soyuttur ve Clone adında bir soyut yöntem içerir. Bu yöntem, performDeepCopy adlı bir boole parametresini kabul eder. Kendisine iletilen parametre doğruysa, derin kopya, aksi takdirde yüzeysel kopya gerçekleştirecektir.

.NET'te somut bir prototip sınıfı oluşturun

CustomerManager sınıfı aşağıda verilmiştir. Müşteri sınıfının örneklerini (bu yalnızca başka bir POCO sınıfıdır) içinde depolayan bir Sözlük içerir. Ayrıca CustomerPrototype adında bir dizin oluşturucu içerir. Dizin oluşturucunun set özelliği, verileri müşteriler adlı Dictionary örneğine depolamak için kullanılır.

  public class CustomerManager

    {

     özel Sözlük müşterileri = yeni Sözlük ();

        genel Müşteri Bunu prototiple [int indeksi]

        {

            {geri dönen müşteriler [dizin] alın; }

            set {customers.Add (index, value); }

        }

    }

.NET'te bir prototip istemci sınıfı oluşturun

Müşteri sınıfı aşağıda verilmiştir. FirstName ve LastName olmak üzere iki özellik ve Clone ve DeepCopy olmak üzere iki yöntem içerir.

[Serileştirilebilir()]

    public class Müşteri: CustomerPrototype

    {

        public string FirstName

        {

            hazırlan;

        }

        public string LastName

        {

            almak; Ayarlamak;

        }

        genel geçersiz kılma CustomerPrototype Clone (bool deepClone)

        {

            anahtarı (deepClone)

            {

                durum doğru:

                    bunu iade edin.DeepCopy (bu) CustomerPrototype olarak;

                yanlış durum:

                    this.MemberwiseClone () CustomerPrototype olarak iade edin;

                varsayılan:

                    this.MemberwiseClone () CustomerPrototype olarak iade edin;

            }

        }

        özel T DeepCopy (T obj)

        {

           // Derin kopyalama yapmak için kodu buraya yazın.

        }

     }

Yukarıdaki kod listesindeki DeepCopy yönteminin kaynak kodunu, buradaki önceki makalemde zaten mevcut olduğu için atladım.

.NET'te bir nesnenin derin bir kopyasını oluşturun

Aşağıdaki kod parçacığı, derin bir kopyalama gerçekleştirmek için daha önce oluşturduğumuz CustomerManager sınıfından nasıl yararlanabileceğinizi göstermektedir.

CustomerManager customerManager = new CustomerManager ();

Müşteri custObj1 = yeni Müşteri ();

custObj1.FirstName = "Joydip";

custObj1.LastName = "Kanjilal";

customerManager [0] = custObj1;

Müşteri custObj2 = yeni Müşteri ();

custObj2.FirstName = "Stephen";

custObj2.LastName = "Smith";

customerManager [1] = custObj2;

Müşteri müşteri = customerManager [0]. Müşteri olarak Clone (true);

Derin bir kopya gerçekleştirmek için Clone yöntemine parametre olarak "true" yu aktardığımıza dikkat edin.

.NET'te bir nesnenin basit bir kopyasını oluşturun

Benzer şekilde, sığ bir kopya gerçekleştirmek için aynı yönteme bir parametre olarak "yanlış" iletebilirsiniz. İşte bunu nasıl başarabileceğiniz.

Müşteri müşteri = customerManager [0]. Müşteri olarak Clone (yanlış);

Son olarak, referansınız için Ana yöntemin tam kodu.

statik geçersiz Ana (dize [] değiştirgeler)

      {

      CustomerManager customerManager = new CustomerManager ();

      Müşteri custObj1 = yeni Müşteri ();

      custObj1.FirstName = "Joydip";

      custObj1.LastName = "Kanjilal";

      customerManager [0] = custObj1;

      Müşteri custObj2 = yeni Müşteri ();

      custObj2.FirstName = "Stephen";

      custObj2.LastName = "Smith";

      customerManager [1] = custObj2;

      Müşteri müşteri = customerManager [0]. Müşteri olarak Clone (true);

      Console.ReadKey ();

      }