Minggu, 21 April 2013

Design Pattern Prototype dengan bahasa pemrograman CSharp

Ada banyak situasi dalam aplikasi kita di mana kita ingin mengambil salinan obyek dari konteks dan kemudian dilanjutkan dengan salinan beberapa set independen operasi. Pola prototipe secara khusus berguna dalam skenario dimana kita dapat hanya menyalin objek dari konteks aplikasi saat ini dan kemudian lanjutkan ke independen dari objek asli.


Dalam diagram di atas para pemain utama yang terlibat adalah:

Prototype : Ini adalah sebuah antarmuka atau kelas abstrak yang mendefinisikan metode untuk mengkloning dirinya sendiri.
ConcretePrototype : ini adalah kelas beton yang akan mengkloning dirinya sendiri.
Client : Obyek aplikasi yang membutuhkan salinan kloning dari objek.
Mari kita mencoba untuk melihat bagaimana kita dapat menerapkan pola ini dalam C #.
class Program
    {
        static void Main(string[] args)
        {
            // The code to demonstrate the classic Prorotype Pattern
            CJ player = new CJ();
            player.Health = 1;
            player.Felony = 10;
            player.Money = 2.0;

            Console.WriteLine("Original Player stats:");
            Console.WriteLine("Health: {0}, Felony: {1}, Money: {2}", 
                player.Health.ToString(), 
                player.Felony.ToString(), 
                player.Money.ToString());

            // We enter the cheat code here and we have a new 
            // player with his health fully restored.
            CJ playerToSave = player.Clone() as CJ;            

            Console.WriteLine("\nCopy of player to save on disk:");
            Console.WriteLine("Health: {0}, Felony: {1}, Money: {2}", 
                playerToSave.Health.ToString(), 
                playerToSave.Felony.ToString(), 
                playerToSave.Money.ToString());

            PerformShallowCopy();
            PerformDeepCopy();
            ICloneableVersionCopy();
            Console.ReadKey(true);

        }

        private static void PerformShallowCopy()
        {
            // The code to demonstrate the shallow copy
            CJEx playerEx = new CJEx();
            playerEx.Health = 1;
            playerEx.Felony = 10;
            playerEx.Money = 2.0;
            playerEx.Details.Fitness = 5;
            playerEx.Details.Charisma = 5;

            // Lets clone the above object and change the 
            // proprties of contained object
            CJEx shallowClonedPlayer = playerEx.Clone() as CJEx;
            shallowClonedPlayer.Details.Charisma = 10;
            shallowClonedPlayer.Details.Fitness = 10;

            // Lets see what happened to the original object
            Console.WriteLine("\nOriginal Object:");
            Console.WriteLine("Charisma: {0}, Fitness: {1}",
                playerEx.Details.Charisma.ToString(),
                playerEx.Details.Fitness.ToString());
            Console.WriteLine("\nShallow Cloned Object:");
            Console.WriteLine("Charisma: {0}, Fitness: {1}",
                shallowClonedPlayer.Details.Charisma.ToString(),
                shallowClonedPlayer.Details.Fitness.ToString());
        }

        private static void PerformDeepCopy()
        {
            // Let us see how we can perform the deep copy now
            CJEx playerEx2 = new CJEx();
            playerEx2.Health = 1;
            playerEx2.Felony = 10;
            playerEx2.Money = 2.0;
            playerEx2.Details.Fitness = 5;
            playerEx2.Details.Charisma = 5;

            // lets clone the object but this time perform a deep copy
            CJEx shallowClonedPlayer2 = playerEx2.Clone() as CJEx;
            shallowClonedPlayer2.Details.Charisma = 10;
            shallowClonedPlayer2.Details.Fitness = 10;

            // Lets see what happened to the original object
            Console.WriteLine("\nOriginal Object:");
            Console.WriteLine("Charisma: {0}, Fitness: {1}",
                playerEx2.Details.Charisma.ToString(),
                playerEx2.Details.Fitness.ToString());
            Console.WriteLine("\nDeep Cloned Object:");
            Console.WriteLine("Charisma: {0}, Fitness: {1}",
                shallowClonedPlayer2.Details.Charisma.ToString(),
                shallowClonedPlayer2.Details.Fitness.ToString());
        }

        private static void ICloneableVersionCopy()
        {
            // Let us see how we can perform the deep copy now
            CJFinal player = new CJFinal();
            player.Health = 1;
            player.Felony = 10;
            player.Money = 2.0;
            player.Details.Fitness = 5;
            player.Details.Charisma = 5;

            // lets clone the object but this time perform a deep copy
            CJFinal clonedPlayer = player.Clone() as CJFinal;
            clonedPlayer.Details.Charisma = 10;
            clonedPlayer.Details.Fitness = 10;

            // Lets see what happened to the original object
            Console.WriteLine("\nOriginal Object:");
            Console.WriteLine("Charisma: {0}, Fitness: {1}",
                player.Details.Charisma.ToString(),
                player.Details.Fitness.ToString());
            Console.WriteLine("\nICloneable Deep Cloned Object:");
            Console.WriteLine("Charisma: {0}, Fitness: {1}",
                clonedPlayer.Details.Charisma.ToString(),
                clonedPlayer.Details.Fitness.ToString());
        }
    }
}


sumber : CodeProject.com

Jumat, 12 April 2013

Design Pattern Abstract Factory dengan bahasa pemrograman CSharp

langsung saja penjelasan dari Abstract Factory Pattern : 
 

Abstrak Factory Pettern di berguna ketika klien perlu membuat objek yang saling berkaitan. Jika kita perlu menciptakan keluarga obyek terkait atau tergantung, maka kita dapat menggunakan Abstrak Factory Pettern. Pettern ini sangat berguna ketika klien tidak tahu persis apa jenis untuk menciptakan. Sebagai contoh, katakanlah Showroom khusus menjual ponsel mendapat permintaan untuk ponsel pintar buatan Samsung. Di sini kita tidak tahu dengan tepat jenis objek yang akan dibuat (dengan asumsi semua informasi untuk telepon dibungkus dalam bentuk benda konkret). Tapi kita tahu bahwa kita sedang mencari ponsel pintar yang diproduksi oleh Samsung. Informasi ini sebenarnya dapat dimanfaatkan jika desain kami memiliki implementasi Abstrak Factory. Jadi dengan ide Abstract Factory Pettern Abstrak, sekarang kita akan mencoba untuk membuat sebuah desain yang akan memfasilitasi penciptaan obyek terkait. Kami akan pergi ke depan dan menulis sebuah aplikasi sederhana untuk skenario baru saja kita bicarakan.

berikut adalah contoh program menggunakan bahasa pemrograman CSharp (C#) :


using System;

using System.Collections.Generic;

using System.Text;



namespace AbstractFactoryDemo

{

    class Program

    {

        static void Main(string[] args)

        {

            PhoneTypeChecker checker = new PhoneTypeChecker(MANUFACTURERS.SAMSUNG);



            checker.CheckProducts();



            Console.ReadLine();



            checker = new PhoneTypeChecker(MANUFACTURERS.HTC);



            checker.CheckProducts();

            Console.ReadLine();



            checker = new PhoneTypeChecker(MANUFACTURERS.NOKIA);



            checker.CheckProducts();

            Console.Read();

        }

    }





    interface IPhoneFactory

    {

        ISmart GetSmart();

        IDumb GetDumb();

    }



    class SamsungFactory : IPhoneFactory

    {

        public ISmart GetSmart()

        {

            return new GalaxyS2();

        }



        public IDumb GetDumb()

        {

            return new Primo();

        }

    }



    class HTCFactory : IPhoneFactory

    {

        public ISmart GetSmart()

        {

            return new Titan();

        }



        public IDumb GetDumb()

        {

            return new Genie();

        }

    }



    class NokiaFactory : IPhoneFactory

    {

        public ISmart GetSmart()

        {

            return new Lumia();

        }



        public IDumb GetDumb()

        {

            return new Asha();

        }

    }



    class Lumia : ISmart

    {

        public string Name()

        {

            return "Lumia";

        }

    }



    class Asha : IDumb

    {

        public string Name()

        {

            return "Asha";

        }

    }



    interface ISmart

    {

        string Name();

    }



    class GalaxyS2 : ISmart

    {

        public string Name()

        {

            return "GalaxyS2";

        }

    }



    class Primo : IDumb

    {

        public string Name()

        {

            return "Blue";

        }

    }



    interface IDumb

    {

        string Name();

    }



    class Titan : ISmart

    {

        public string Name()

        {

            return "Titan";

        }

    }



    class Genie : IDumb

    {

        public string Name()

        {

            return "Genie";

        }

    }



    enum MANUFACTURERS

    {

        SAMSUNG,

        HTC,

        NOKIA

    }

    class PhoneTypeChecker

    {

    

        IPhoneFactory factory;

        MANUFACTURERS manu;



        public PhoneTypeChecker(MANUFACTURERS m)

        {

            manu = m;

        }



        public void CheckProducts()

        {

            switch (manu)

            {

                case MANUFACTURERS.SAMSUNG:

                    factory = new SamsungFactory();

                    break;

                case MANUFACTURERS.HTC:

                    factory = new HTCFactory();

                    break;

                case MANUFACTURERS.NOKIA:

                    factory = new NokiaFactory();

                    break;

            }



            Console.WriteLine(manu.ToString() + ":\nSmart Phone: " + factory.GetSmart().Name() + "\nDumb Phone: " + factory.GetDumb().Name());

        }

    }

}

Design Pattern Factory Method dengan bahasa pemrograman CSharp

Setelah beberapa waktu mencari referensi di internet akhirnya nemu juga metode - metode yang di gunakan dalam postingan kali ini yaitu Design Pettern Factory Method.
Tanpa panjang lebar langsung saja penjelasan tentang Factory Method :


Ada banyak skenario saat kelas perlu menciptakan beberapa objek.
Kelas dapat melakukannya dengan bebas tetapi harus tahu tentang masing-masing dan setiap kelas.
Ide factory method adalah memiliki kemampuan kelas untuk menciptakan kelas-kelas lain tanpa mereka tahu tentang semua kemungkinan kelas yang ada.
Ini memberi kita diperpanjang, Dengan factory method kita mendapatkan kemungkinan untuk menciptakan, memelihara dan memanipulasi koleksi benda-benda yang berbeda yang memiliki beberapa karakteristik umum.
Penggunaan utama dari method ini adalah kelas yang mengelola banyak benda seperti Document Manager, manajer Control, Facility Manager.

berikut adalah contoh program dengan menggunakan bahasa pemrograman CSharp (C#) :


using System;

using System.Collections.Generic;

using System.Text;



namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            AEmployee man = new Manager();

            Console.WriteLine("Recievables for " + man.ToString() + ": \n");

            man.PrintBenefits();



            Console.ReadLine();



            man = new Engineer();

            Console.WriteLine("Recievables for " + man.ToString() + ": \n");

            man.PrintBenefits();



            Console.ReadLine();

        }

    }



    abstract class AItems

    {

        //This is just to facilitate testing of our application.

        public override string ToString()

        {

            return this.GetType().Name;

        }

    }



    class Car : AItems { }



    class CellPhone : AItems    { }



    class Computer : AItems    {    }



    class LapTop : AItems    {   }



    class MotorBike : AItems    {  }



    class EntertainmentAllowance : AItems  { }



    class TravelAllowance : AItems  { }



    class Salary : AItems   {  }



    class Incentives : AItems  {  }



   

    abstract class AEmployee

    {

        List benefits;



        public AEmployee()

        {

            benefits = new List();

        }



        public void AddBenefit(AItems ben)

        {

            benefits.Add(ben);

        }



        public void PrintBenefits()

        {

            foreach (AItems a in benefits)

            {

                Console.WriteLine(a.ToString());

            }

        }



        public override string ToString()

        {

            return this.GetType().Name;

        }

    }



   

    class Manager : AEmployee

    {

        public Manager()

        {

            AddBenefit(new Car());

            AddBenefit(new CellPhone());

            AddBenefit(new LapTop());

            AddBenefit(new EntertainmentAllowance());

            AddBenefit(new TravelAllowance());

            AddBenefit(new Salary());

            AddBenefit(new Incentives());

        }

    }



   

    class Engineer : AEmployee

    {

        public Engineer()

        {

            AddBenefit(new Computer());

            AddBenefit(new MotorBike());

            AddBenefit(new TravelAllowance());

            AddBenefit(new Salary());

        }

    }

}

Twitter Delicious Facebook Digg Stumbleupon Favorites More