Arabulucu ( Mediator ) Tasarım Deseni
Uygulama büyüdükçe, bir çok sınıfı ve sınıf hiyerarşilerini içerir. Uygulamanın mantık ve veri koldarı bu sınıflara dağıtılır. Uygulamanın çalışabilmesi için bu sınıflar arasında sürekli bir haberleşme vardır. Sınıfların sayısı arttıkça, aralarındaki bağımlılıklar artar, uygulamanın bakımı ve değiştirilmesi zorlaşır. İşte arabulucu tasarım deseni, bu sınıflar arasındaki bağımlılıkları azaltmak ve aralarındaki iletişimi kolaylaştırmak için kullanılır. Bu sınıflar arasında arabuluculuk yapar.
Örnek Uygulama
Örnek uygulamada, istemci durumundaki Kullanıcı nın bilgisayar, televizyon ve radyo olmak üzere 3 adet elektronik aygıtı vardır. Bu istemci, aynı anda yalnızca bir tane aygıtın çalışmasını istiyor. Bu durumda, herhangi bir aygıttan biri çalıştığında diğerlerinin durması gerekmektedir. Örnekte arabulucu sınıf olan Arabulucu nesnesi, kullanıcı ile bu üç aygıt arasındaki haberleşmeyi sağlamaktadır. Böylece kullanıcı ile aygıtlar arasındaki bağımlılık azalmıştır. Ayrıca kullanıcının istediği bir zamanda yalnızca bir tane aygıt çalışması mantığını da bu arabulucu sınıf sağlamaktadır.
- UML Sınıf Çizelgesi
- ElektronikAygıt.java
- Bilgisayar.java
- Televizyon.java
- Radyo.java
- Arabulucu.java
- Kullanıcı.java
- Ekran Çıktısı

/**
* @author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/
package com.ilkerkonar.td.desen.ornekkodlar.mediator;
/**
* ElektronikAygıt.java
*
* Tarih bilgisi : May 24, 2014
*/
public abstract class ElektronikAygıt {
protected Arabulucu arabulucu;
public ElektronikAygıt( final Arabulucu arabulucu ) {
this.arabulucu = arabulucu;
}
public abstract void çalıştır();
public abstract void durdur();
}
/**
* @author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/
package com.ilkerkonar.td.desen.ornekkodlar.mediator;
/**
* Bilgisayar.java
*
* Tarih bilgisi : May 24, 2014
*/
public class Bilgisayar extends ElektronikAygıt {
public Bilgisayar( final Arabulucu arabulucu ) {
super( arabulucu );
arabulucu.bilgisayarEkle( this );
}
@Override
public void çalıştır() {
System.out.println( "Bilgisayar çalıştı." );
arabulucu.bilgisayarÇalıştır();
}
@Override
public void durdur() {
System.out.println( "Bilgisayar durdu." );
}
}
/**
* @author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/
package com.ilkerkonar.td.desen.ornekkodlar.mediator;
/**
* Televizyon.java
*
* Tarih bilgisi : May 24, 2014
*/
public class Televizyon extends ElektronikAygıt {
public Televizyon( final Arabulucu arabulucu ) {
super( arabulucu );
arabulucu.televizyonEkle( this );
}
@Override
public void çalıştır() {
System.out.println( "Televizyon çalıştı." );
arabulucu.televizyonÇalıştır();
}
@Override
public void durdur() {
System.out.println( "Televizyon durdu." );
}
}
/**
* @author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/
package com.ilkerkonar.td.desen.ornekkodlar.mediator;
/**
* Radyo.java
*
* Tarih bilgisi : May 24, 2014
*/
public class Radyo extends ElektronikAygıt {
public Radyo( final Arabulucu arabulucu ) {
super( arabulucu );
arabulucu.radyoEkle( this );
}
@Override
public void çalıştır() {
System.out.println( "Radyo çalıştı." );
arabulucu.radyoÇalıştır();
}
@Override
public void durdur() {
System.out.println( "Radyo durdu." );
}
}
/**
* @author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/
package com.ilkerkonar.td.desen.ornekkodlar.mediator;
/**
* Arabulucu.java
*
* Tarih bilgisi : May 24, 2014
*/
public class Arabulucu {
private Bilgisayar bilgisayar;
private Televizyon televizyon;
private Radyo radyo;
public void bilgisayarEkle( final Bilgisayar bilgisayar ) {
this.bilgisayar = bilgisayar;
}
public void radyoEkle( final Radyo radyo ) {
this.radyo = radyo;
}
public void televizyonEkle( final Televizyon televizyon ) {
this.televizyon = televizyon;
}
public void bilgisayarÇalıştır() {
// Bilgisayar çalıştığında, diğer aygıtların durması isteniyor.
televizyon.durdur();
radyo.durdur();
}
public void radyoÇalıştır() {
// Radyo çalıştığında, diğer aygıtların durması isteniyor.
bilgisayar.durdur();
televizyon.durdur();
}
public void televizyonÇalıştır() {
// Televizyon çalıştığında, diğer aygıtların durması isteniyor.
bilgisayar.durdur();
radyo.durdur();
}
}
/**
* @author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/
package com.ilkerkonar.td.desen.ornekkodlar.mediator;
/**
* Kullanıcı.java
*
* Tarih bilgisi : May 24, 2014
*/
public class Kullanıcı {
public static void main( final String[] args ) {
// Arabulu sınıf yaratılır.
final Arabulucu arabulucu = new Arabulucu();
// Arabulucu sınıfı içeren nesneler yaratılıyor ve bir
// dizine ekleniyor. Bu nesneler arasındaki haberleşmeyi
// ortak Arabulucu sınıf sağlayacak.
final ElektronikAygıt[] aygıtlar = new ElektronikAygıt[ 3 ];
aygıtlar[ 0 ] = new Bilgisayar( arabulucu );
aygıtlar[ 1 ] = new Televizyon( arabulucu );
aygıtlar[ 2 ] = new Radyo( arabulucu );
// Her bir aygıtı çalıştır.
for ( final ElektronikAygıt aygıt : aygıtlar ) {
aygıt.çalıştır();
}
}
}
Televizyon durdu.
Radyo durdu.
Televizyon çalıştı.
Bilgisayar durdu.
Radyo durdu.
Radyo çalıştı.
Bilgisayar durdu.
Televizyon durdu.
Yorumlar
Yorum Yaz, Düşüncelerini Paylaş