Monday, January 4, 2016

ABSTRACT FACTORY PATTERN





Abstract Factory Pattern desain perangkat lunak pola yang menyediakan cara untuk merangkum sekelompok pabrik individu yang memiliki tema umum.
Dalam penggunaan normal, perangkat lunak klien menciptakan implementasi konkret dari pabrik abstrak (Abstrack Factory) dan kemudian menggunakan antarmuka generik untuk membuat objek konkret yang merupakan bagian dari tema. Klien tidak tahu (atau peduli) yang objek konkret karena mendapat dari masing-masing pabrik internal yang karena hanya menggunakan antarmuka generik dari produk mereka. Pola ini memisahkan rincian pelaksanaan satu set objek dari penggunaan umum mereka.
Inti dari metode Pola Abstrak adalah untuk “Menyediakan sebuah antarmuka untuk menciptakan keluarga obyek terkait atau tergantung tanpa menentukan kelas beton mereka”.


sciencecatcit.blogspot.co.id/
Prinsip dasar dari Abstract Factory pattern adalah:
1. Terdapat kelas Abstract Factory (sebuah interface), dimana Abstract Factory merupakan sebuah interface yang mendefinisikan bagaimana cara untuk, membuat objek dari Abstract Product. Intent dari Abstract Factroy adalah menciptakan family dari objek yang berkaitan tanpa harus bergantung pada concrete class-nya.
2. Terdapat kelas Concrete Factory, dimana kelas ini akan mengimplementasikan semua metode pada AbstractFactory untuk membuat objek dari concrete Product.
3. Terdapat kelas Abstract Product, dimana kelas ini merupakan sebuah interface untuk mendefinisikan tipe dari masing-masing objek produk.
4. Terdapat kelas Product, merupakan kelas yang akan mengimplementasikan semua metode pada AbstractProduct.
5. Terdapat Client, adalah kelas yang akan terhubung dengan kelas Abstrac tFactory dan Abstract Product.

contoh :
using System;

namespace abstrakFactory
{
    abstract class Universitas
    {
        public abstract Universitas_A Pake_Nama();
        public abstract Universitas_B Pake_Nick();
         
    }
     
    class Universitas_Satu : Universitas
    {
        public override Universitas_A Pake_Nama()
        {
            return new Nama_RitaArisKurniasari();
        }
        public override Universitas_B Pake_Nick();
        {
            return new Nick_Rita();
        }
    }
     
    class Universitas_Dua : Universitas
    {
        public override Universitas_A Pake_Nama()
        {
            return new Nama_DiaWahyuningsih();
        }
        public override Universitas_B Pake_Nick()
        {
            return new Nick_Dia();
        }
    }
     
    abstract class Universitas_A {}
    abstract class Universitas_B
    {
        public abstract void Interact(Universitas_A a);
    }
     
    class Nama_RitaArisKurniasari : Universitas_A{}
    class Nick_Rita : Universitas_B
    {
        public override void Interact(Universitas_A a)
        {
            Console.WriteLine();
            Console.WriteLine("UNIVERSITAS A");
            Console.WriteLine(" "+this.GetType().Name);
            Console.WriteLine(" && ");
            Console.WriteLine(" "+a.GetType().Name);
        }
    }
     
    class Nama_DiaWahyuningsih : Universitas_A{}
    class Nick_Dia : Universitas_B
    {
        public override void Interact(Universitas_A a)
        {
            Console.WriteLine();
            Console.WriteLine("UNIVERSITAS B");
            Console.WriteLine(" "+this.GetType().Name);
            Console.WriteLine(" && ");
            Console.WriteLine(" "+a.GetType().Name);
        }
    }
     
    class Atas
    {
        private Universitas_A Pake_Nama;
        private Universitas_B Pake_Nick;
         
        public Atas(Universitas aa)
        {
            Universitas_B = aa.Pake_Nick();
            Universitas_A = aa.Pake_Nama();
        }
         
        public void Eksekusi()
        {
            Universitas_B.Interact(Universitas_A);
        }
    }
     
    class Program
    {
        public static void Main(string[] args)
        {
            Universitas satu = new Universitas_Satu();
            Atas x1 = new Atas(satu);        
            x1.Eksekusi();          
                
            Universitas dua = new Universitas_Dua();
            Atas x2 = new Atas(dua);
            x2.Eksekusi();
                
            Console.WriteLine();
             
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
    }
}
 

No comments:

Post a Comment