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());

        }

    }

}

Jumat, 29 Maret 2013

Design Pettern Singleton dengan bahasa CSharp

Akhinya ada entri baru untuk blog yang setelah beberapa tahun tidak di urus sampai lupa caranya untuk membuat postingan baru... kebiasaan dengan tampilan lama jadi agak susah menyesuai kan dengan yang baru, maklum sih masi nubi. langsung saja nih mau bikin contoh program Design Pettern Singleton dengan bahasa C#, tapi sebelum masuk ke program apa sih Design Pettern Singleton... sebenarnya Design Pettern tidak hanya Singleton saja melainkan ada banyak sih (lupa jumlahnya akibat kebanyakan ngegame :P) cuma untuk postingan sekarang untuk tugas kuliah membantu sodara - sodara sekalian agar bisa melakukan koneksi ke database dengan lebih efisien. sebenarnya tanpa menggunakan singleton pun bisa terkoneksi ke database cuma akan lebih memboroskan memory di karenakan koneksi ke database yang menggunakan koneksi secara indifidual contoh nya seperti di bawah ini :

 nah sodara - sodara sekalian bisa berpikiran "kalau cuma 3 koneksi sih tidak apa - apa" tetapi bayangkan bila ada 100 koneksi atau lebih itu akan mengganggu kinerja database itu sendiri. pastinya ada cara yang lebih efisien yang akan mempermudah koneksi ke database tanpa memerlukan memory yang tidak terlalu besar salah satunya adalah Singleton. cara kerja singleton adalah dengan menggunakan 1 koneksi saja tetapi dapat menampung semua query yang akan di kirimkan ke database untuk contohnya pada gambar di bawah ini :

 lebih effisien kan sodara ?? dan pastinya lebih hemat memory tetapi bagaimana sih cara mengimplementasikan kedalam bahasa pemrogaram C# untuk sementara saya akan memberikan contoh program yang sederhana dikarenakan kemampuan saya yang masi nubi,
using System;

namespace Singleton
{
 
 class Program
{
    static void Main(string[] args)
    {
        connect x = connect.Instance();
        x.Name = "Blue";
        connect z = connect.Instance();
        z.Status = "Mahasiswa";
        
        connect b = connect.Instance();
        Console.WriteLine("Nama : " + b.Name);

        connect c = connect.Instance();
        Console.WriteLine("Status : " + c.Status);
        Console.ReadKey(true);
    }
}

public class connect
{
    private static connect self;
    private string name;
    private string status;
 public string Status
 {
  get{return status;}
  set{ status = value;}
 }
    public string Name
    {
        get { return name; }
        set { name = value; }
    }

   
    private connect() { }

    public static connect Instance()
    {
        
        if (self == null)
            self = new connect();
        return self;
    }
}
}
setelah di compile hasilnya akan seperti ini :



mudah kan sodara
untuk sementara cukup sekian penjelasan dari saya. semoga menjadi manfaat bagi banyak orang :D

Twitter Delicious Facebook Digg Stumbleupon Favorites More