Adapter pattern adalah salah satu pattern yang
termasuk ke dalam structural
pattern.Adapter pattern berfungsi untuk menggunakan kembali method yang sudah digunakan pada kelas sebelumnya; terhadap
kelas baru yang akan kita buat.
Dalam
Adapter Pattern terdapat empat kelas: kelas adaptee, kelas adapter, kelas
client, kelas target.
DIAGRAM KELAS ADAPTER
PATTERN
PENENTUAN KELAS PADA
ADAPTER PATTERN
Kelas Adaptee: merupakan kelas yang methodnya akan
diadaptasi oleh kelas lainnya. Biasanya kelas ini akan diturunkan ke kelas
Adapter. pada diagram kelas di atas. Kelas Adaptee adalah kelas Consultant.
Kelas
Adapter: merupakan kelas yang meng-extends kelas Adaptee. Ciri paling umum dari
kelas ini adalah memiliki method yang memanggil method di kelas adaptee. Pada
diagram kelas diatas, kelas Adapter adalah kelas Employee Adapter.
Kelas Target: merupakan kelas yang diakses oleh kelas
client. Biasanya target tidak menggunakan kelas namun hanya berupa interface.
Kelas target pada diagram kelas diatas adalah kelas IEmployee.
Kelas
Client: merupakan kelas yang mengakses kelas target. Dapat berupa kelas main
dengan membuat objek yang berasal dari kelas target. Kelas Client pada diagram
kelas diatas adalah kelas Program yang mengandung method main.
Berikut contoh program dari Adapter Pattern dalam bentuk c# :
/*
* Created by SharpDevelop.
* User: Atiek
* Date: 7/13/2013
* Time: 5:16 AM
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections;
namespace Adapter_Pattern
{
class Operasi
{
public void Perintah_Operasi()
{
Console.WriteLine("---> Memanggil Pasukan Perang");
}
}
class Sasaran
{
public virtual void Pesan_Singkat()
{
Console.WriteLine("Memonitor Target sasaran tembak");
}
}
class Adapter : Sasaran
{
private Operasi operasi = new Operasi();
public override void Pesan_Singkat()
{
operasi.Perintah_Operasi();
}
}
class Program
{
public static void Main(string[] args)
{
Console.WriteLine();
Console.WriteLine(" Implementasi Adapter Pattern");
Console.WriteLine(" ----------------------------");
Console.WriteLine(" "+DateTime.Now);
Console.WriteLine();
Console.WriteLine("Pemanggilan Class Target");
Sasaran sasaran = new Adapter();
Console.WriteLine();
sasaran.Pesan_Singkat();
Console.WriteLine();
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
Hasil Running :
Maksud dari pola ini
adalah dengan menambahkan tanggung jawab tambahan secara dinamis untuk objek.
Memperluas fungsionalitas obyek bisa dilakukan secara statis (pada saat
kompilasi) dengan menggunakan warisan namun mungkin diperlukan untuk memperluas
fungsi suatu objek secara dinamis (saat runtime) sebagai objek yang digunakan.
Pola dekorator berlaku ketika ada kebutuhan untuk secara dinamis menambahkan
serta menghapus tanggung jawab ke kelas, dan ketika subclassing tidak mungkin
karena jumlah besar dari subclass yang dapat terjadi. Tujuan dari decorator
pattern adalah menciptakan suatu mata rantai objek, dimana setiap objek mempunyai
object responsible pada fungsi objek berikutnya. Konteks dari pola ini
adalah diinginkan untuk memperkaya behaviour dari suatu class, objek
komponen terdekorasi bisa digunakan sama seperti objek komponen
biasa, tanggung jawab dari proses dekorasi tidak diinginkan ada pada
class komponen, kemungkinan ada proses dekorasi yang ditambahkan di masa
depan yang tak bisa diperkirakan dan harus diantisipasi.
Tujuan Pattern ini adalah
menciptakan suatu mata rantai object, dimana setiap object mempunyai objects
responsible pada fungsi objek berikutnya.( The Decorator attaches
additional responsibilities to an object dynamically.)
a.
Komponen - Interface untuk benda yang dapat
memiliki tanggung jawab ditambahkan kepada mereka secara dinamis.
b.
ConcreteComponent - Mendefinisikan sebuah objek yang
tanggung jawab tambahan dapat ditambahkan.
c.
Dekorator - Menjaga referensi ke objek
Komponen dan mendefinisikan antarmuka yang sesuai dengan antarmuka Komponen
ini.
d. Dekorator Beton - Beton
dekorator memperluas fungsionalitas komponen dengan menambahkan negara atau
menambahkan perilaku.
Contoh Code dalam decorator pattern dalam c# :
/*
* Created by SharpDevelop.
* User: Atiek
* Date: 7/13/2013
* Time: 5:21 AM
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections;
namespace Decorator_Pattern
{
// Class Operator Matematika atau Component
abstract class Operator_Matematika
{
public abstract void Operasi();
}
// Class Perkalian atau Object Component Perkalian
class Operator_Perkalian : Operator_Matematika
{
public override void Operasi()
{
Console.WriteLine("Menggunakan Operator Perkalian");
Console.WriteLine("------------------------------");
}
}
// Menciptakan class abstract Perkalian atau Decorator
abstract class Perkalian : Operator_Matematika
{
protected Operator_Matematika operator_Matematika;
public void Pasang_Operator(Operator_Matematika operator_Matematika)
{
this.operator_Matematika = operator_Matematika;
}
public override void Operasi()
{
if (operator_Matematika != null)
{
operator_Matematika.Operasi();
}
}
}
// Concrete Decorator Perkalian Bilangan Ganjil
class Perkalian_Ganjil : Perkalian
{
private string operator_mtk = "";
public override void Operasi()
{
base.Operasi();
operator_mtk = "Operator Perkalian ( X )";
Console.WriteLine(operator_mtk);
Console.WriteLine();
Console.WriteLine("Perkalian Ganjil");
Console.WriteLine("Isi Data Perkalian Ganjil");
int a,b;
int c = 0;
Console.Write("Input Bil Ganjil A = ");
a=Convert.ToInt32(Console.ReadLine());
Console.Write("Input Bil Ganjil B = ");
b=Convert.ToInt32(Console.ReadLine());
c = a * b;
Console.WriteLine("Hasil Perkalian Bil Ganjil = {0}",c);
Console.WriteLine();
}
}
// Concrete Decorator Perkalian Bilangan Ganjil
class Perkalian_Genap : Perkalian
{
void Perkalian_Bil_Genap()
{
Console.WriteLine("Perkalian Genap");
}
public override void Operasi()
{
base.Operasi();
Perkalian_Bil_Genap();
Console.WriteLine("Isi Data Perkalian Genap");
int x,y;
int z = 0;
Console.Write("Input Bil Genap X = ");
x=Convert.ToInt32(Console.ReadLine());
Console.Write("Input Bil Genap Y = ");
y=Convert.ToInt32(Console.ReadLine());
z = x * y;
Console.WriteLine("Hasil Perkalian Bil Ganjil = {0}",z);
}
}
class Program
{
public static void Main(string[] args)
{
Console.WriteLine(" Operasi Matematika");
Console.WriteLine("");
// Menciptakan Product Perkalian dengan 2 jenis Bilangan yaitu Ganjil dan Genap
Operator_Perkalian op_Perkalian = new Operator_Perkalian();
Perkalian_Ganjil ganjil = new Perkalian_Ganjil();
Perkalian_Genap genap = new Perkalian_Genap();
// Pemanggilan Class Perkalian
ganjil.Pasang_Operator(op_Perkalian);
genap.Pasang_Operator(ganjil);
genap.Operasi();
Console.WriteLine();
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
PROXY PATTERN
Dalam pemrograman komputer, pola proxy
adalah pola desain perangkat lunak. Proxy dalam bentuk yang
paling umum adalah fungsi kelas sebagai sebuah
antarmuka untuk sesuatu yang lain. Proxy bisa antarmuka
untuk apa saja: koneksi jaringan, sebuah objek besar di
memori, file, atau beberapa sumber daya lain
yang mahal atau tidak mungkin untuk menduplikasi.
Sebuah contoh yang terkenal dari pola proxy
adalah referensi menghitung objek pointer. Dalam situasi di
mana beberapa salinan obyek yang kompleks harus
ada pola proxy dapat disesuaikan dengan menggabungkan pola flyweight untuk
mengurangi jejak memori aplikasi. Biasanya, satu
contoh dari objek yang kompleks dan beberapa objek
proxy yang diciptakan, yang semuanya mengandung referensi
ke obyek yang kompleks tunggal (asli). Setiap operasi yang dilakukan
pada proxy akan diteruskan ke objek asli.
Setelah semua contoh proxy berada di luar ruang
lingkup, memori obyek yang kompleks yang mungkin
akan deallocated.
Contoh Code dalam proxy pattern dalam c# :
/*
* Created by SharpDevelop.
* User: Atiek
* Date: 7/13/2013
* Time: 5:31 AM
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections;
namespace Proxy_Pattern
{
// "Subject Class Sekolah"
abstract class Sekolah_SMP
{
public abstract void Pendaftaran();
}
// "RealSubject Class Data Siswa Baru"
class Siswa_Baru : Sekolah_SMP
{
public override void Pendaftaran()
{
string dt="dt";
Console.WriteLine("Proses Pendaftaran Siswa Baru 2013");
Console.WriteLine("-----------------------------------");
string[] nama = new string[dt.Length];
string[] alamat = new string[dt.Length];
string[] tgl_lahir = new string[dt.Length];
string[] sekolah_asal = new string[dt.Length];
for (int y=0;y<dt.Length;y++)
{
Console.Write("Isi Nama Pendaftar : ");
nama[y] = Convert.ToString(Console.ReadLine());
Console.Write("Isi Alamat Pendaftar : ");
alamat[y] = Convert.ToString(Console.ReadLine());
Console.Write("Isi Tempat & Tanggal Lahir Pendaftar : ");
tgl_lahir[y] = Convert.ToString(Console.ReadLine());
Console.Write("Isi Sekolah Asal Pendaftar : ");
sekolah_asal[y] = Convert.ToString(Console.ReadLine());
Console.WriteLine("");
}
Console.WriteLine();
Console.WriteLine(" Nama Alamat Tgl. Lahir Asal Sekolah");
Console.WriteLine("|-----------|------------|-------------------|---------------|");
for (int z=0;z<dt.Length;z++)
{
Console.Write(" {0}",nama[z]);
Console.Write(" {0}",alamat[z]);
Console.Write(" {0}",tgl_lahir[z]);
Console.Write(" {0}",sekolah_asal[z]);
Console.WriteLine();
}
}
}
// "Proxy Pusat Data Dinas Pendidikan"
class Proxy_Dinas_Pendidikan : Sekolah_SMP
{
Siswa_Baru siswa_Baru;
public override void Pendaftaran()
{
// Inisialisasi Pemanggilan Methode Yang Memiliki Data Siswa
if (siswa_Baru == null)
{
siswa_Baru = new Siswa_Baru();
}
siswa_Baru.Pendaftaran();
}
}
class Program
{
public static void Main(string[] args)
{
// Menciptakan Proxy dan Memminta Layanan Data
Proxy_Dinas_Pendidikan proxy_Dinas = new Proxy_Dinas_Pendidikan();
proxy_Dinas.Pendaftaran();
Console.WriteLine();
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
Hasil Running :
STRATEGY PATTERN
Saya mulai dulu dengan
Strategy Pattern ya, Strategy Pattern pattern memiliki nama lain yaitu Policy Pattern. Menurut
GoF, Staretegy Pattern yaitu :
Define a family of algorithms, encapsulate each one, and
make them interchangeable.
Strategy lets the algorthm vary independently from client
that use it.
Jadi strategy pattern digunakan
untuk mengelompokkan sejumlah algoritma, mengenskapsulasinya menjadi sebuah
objek, dimana nantinya kita bisa mempertukarkan objek tersebut. Hal ini berarti
kita dapat merubah atau mempertukarkan algoritma tersebut secara dinamis pada
saat aplikasi sedang berjalan. Strategy pattern sangat membantu dalam
memelihara kode program, karena ketika kita memiliki banyak algoritma maka
aplikasi akan semakin kompleks dan tentu saja akan sangat sulit memelihara kode
program kita. Lagi pula dengan mengenkapsulasi algoritma mejadi sebuah kelas,
kita bisa menggunakan algoritma tersebut kapan pun bila dibutuhkan.
Contoh Code dalam strategy pattern dalam c# :
/*
* Created by SharpDevelop.
* User: Atiek
* Date: 7/13/2013
* Time: 5:49 AM
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
namespace Strategy_Pattern
{
// "Strategy"
abstract class Strategy
{
public abstract void AlgorithmInterface();
}
// "ConcreteStrategyA"
class ConcreteStrategyA : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine(" Membuat Strategy A");
Console.WriteLine(" Algoritma Caesar Chiper");
}
}
// "ConcreteStrategyB"
class ConcreteStrategyB : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine(" Membuat Strategy B");
Console.WriteLine(" Algoritma Vigenere Chiper");
}
}
// "ConcreteStrategyC"
class ConcreteStrategyC : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine(" Membuat Strategy C");
Console.WriteLine(" Algoritma Elgamal");
}
}
// "ConcreteStrategyD"
class ConcreteStrategyD : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine(" Membuat Strategy D");
Console.WriteLine(" Algoritma Vernam Chiper");
}
}
// "Context"
class Context
{
Strategy strategy;
// Constructor
public Context(Strategy strategy)
{
this.strategy = strategy;
}
public void ContextInterface()
{
strategy.AlgorithmInterface();
}
}
class Program
{
public static void Main(string[] args)
{
Console.WriteLine(" Strategy Pattern In CSharp");
Console.WriteLine(" --------------------------");
Context context;
// Three contexts following different strategies
context = new Context(new ConcreteStrategyA());
context.ContextInterface();
context = new Context(new ConcreteStrategyB());
context.ContextInterface();
context = new Context(new ConcreteStrategyC());
context.ContextInterface();
context = new Context(new ConcreteStrategyD());
context.ContextInterface();
Console.WriteLine();
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
Hasil Running :
BRIDGE PATTERN
"Memisahkan sebuah abstraksi dari pelaksanaannya sehingga dua dapat bervariasi secara independen" adalah niat untuk jembatan pola desain seperti yang dinyatakan oleh GOF.
Pola desain jembatan adalah versi modifikasi dari gagasan "lebih memilih komposisi atas warisan".
Elemen Bridge Pola Desain
- Abstraksi - inti dari pola desain jembatan dan mendefinisikan inti masalahnya. Berisi referensi ke pelaksana.
- Refined Abstraksi - Memperpanjang abstraksi mengambil detail halus satu tingkat di bawah. Menyembunyikan unsur-unsur halus dari implemetors.
- Pelaksana - Interface ini adalah tingkat higer daripada abstraksi. Hanya mendefinisikan operasi dasar.
- Beton Implementasi - Mengimplementasikan pelaksana atas dengan menyediakan implementasi konkret.
Struktur :
Contoh Code dalam bridge pattern dalam c# :
/*
* Created by SharpDevelop.
* User: Atiek
* Date: 7/13/2013
* Time: 5:18 AM
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
namespace Bridge_Pattern
{
abstract class Penerjemah
{
public abstract void Operasi();
}
class Abstraksi
{
protected Penerjemah penerjemah;
public Penerjemah Penerjemah
{
set{ penerjemah = value; }
}
public virtual void Operasi()
{
penerjemah.Operasi();
}
}
class PenentuanAbstraksi : Abstraksi
{
public override void Operasi()
{
penerjemah.Operasi();
}
}
class PembuatPenerjemah : Penerjemah
{
public override void Operasi()
{
Console.WriteLine("Menjalankan Bahasa Inggris");
}
}
class PembuatPenerjemah_2 : Penerjemah
{
public override void Operasi()
{
Console.WriteLine("Menjalankan Bahasa Jerman");
}
}
class Program
{
public static void Main(string[] args)
{
Console.WriteLine();
Console.WriteLine(" Implementasi Bridge Pattern");
Console.WriteLine(" ----------------------------");
Console.WriteLine(" "+DateTime.Now);
Console.WriteLine();
Abstraksi abs = new PenentuanAbstraksi();
// Memanggil dan menyetting Penerjemah
abs.Penerjemah = new PembuatPenerjemah();
abs.Operasi();
// Memanggil dan menjalankan Penerjemah
abs.Penerjemah = new PembuatPenerjemah_2();
abs.Operasi();
Console.WriteLine();
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
Tidak ada komentar:
Posting Komentar