Arabulucu
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 :
Ö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.
Örnek Sınıf Çizelgesi :
Örnek Java Kodu : ( Kodlar java 1.6.0.7 ile derlenip, çalıştırılmıştır. )
ElektronikAygıt.java :
public abstract class ElektronikAygıt {
protected Arabulucu arabulucu;
public ElektronikAygıt( Arabulucu arabulucu ) {
this.arabulucu = arabulucu;
}
public abstract void çalıştır();
public abstract void durdur();
}
Bilgisayar.java :
public class Bilgisayar extends ElektronikAygıt {
public Bilgisayar( 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." );
}
}
Televizyon.java :
public class Televizyon extends ElektronikAygıt {
public Televizyon( 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." );
}
}
Radyo.java :
public class Radyo extends ElektronikAygıt {
public Radyo( 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." );
}
}
Arabulucu.java :
public class Arabulucu {
private Bilgisayar bilgisayar;
private Televizyon televizyon;
private Radyo radyo;
public void bilgisayarEkle( Bilgisayar bilgisayar ) {
this.bilgisayar = bilgisayar;
}
public void radyoEkle( Radyo radyo ) {
this.radyo = radyo;
}
public void televizyonEkle( Televizyon televizyon ) {
this.televizyon = televizyon;
}
public void bilgisayarÇalıştır() {
televizyon.durdur();
radyo.durdur();
}
public void radyoÇalıştır() {
bilgisayar.durdur();
televizyon.durdur();
}
public void televizyonÇalıştır() {
bilgisayar.durdur();
radyo.durdur();
}
}
Kullanıcı.java :
public class Kullanıcı {
public static void main(String[] args) {
Arabulucu arabulucu = new Arabulucu();
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 ( ElektronikAygıt aygıt : aygıtlar ) {
aygıt.çalıştır();
}
}
}