Bu desen Factory Method desenine çok benzer. Amaç yine aynıdır. Sistemden nesnelerin oluşma işini soyutlar. Abstract Factory benzer özellikleri olan nesne fabrikalarını gruplar. İçinde birden fazla fabrika vardır.
Örneğimizde birden fazla türde database’de kaydetme ve sorgulama işlemlerini gruplamak için soyut fabrikayı kullanıyoruz : 
Kısaca kodlarına da bakalım :
Devamını okuyun »
Bu tasarım deseni nesne oluşturma işini sistemden ayırır ve aldığı parametreye göre nesneleri oluşturarak kullanıcıya geri döner.
Bir örnek verecek olursak düşünün ki gezmeye giderken farklı yöntemleriniz olsun. Ben şimdilik iki tane kullanacağım : Araba ve Bisiklet. Bu iki sınıf “Yöntem” arayüzümüzden türemişler. Bir adet de YöntemFabrika’mız var.
{
void Gez();
}
Araba.cs
{
{
MessageBox.Show(“arabayla geziyorum”);
}
}
Bisiklet.cs
{
{
MessageBox.Show(“bisikletle geziyorum”);
}
}
YöntemFabrikası.cs
{
{
return new Araba();
else if(opt==”bisikletle”)
return new Bisiklet();
return new Araba();//if’lere girmezse
}
}
ve kullanacağımız yer
Yöntem y = new YöntemFabrikası().yöntemYarat(parametre );
y.Gez();
Türkçe’ye Tek Nesne olarak çevrilen bu tasarım desenindeki ana amaç bir nesnenin yalnızca bir kez oluşturulabilmesidir. Buna neden ihtiyaç duyarız sorusuna gelince mesela bir bağlantıyı dinleyen nesneniz olsun. Bunu ikince kez yaratmak kimi zaman sorunlara yol açabilir. Sonuçta bunlar sonsuz threadlerdir. Onun yerine bu nesne bir kez yaratılsın ve ihtiyaç duyulduğu zaman daha önce oluşan nesne oraya gitsin ve işlerini halletsin isteriz.
Şimdi biz bu örnekte bir adet RandomSayiVerici oluşturduk. Özellikle Random sınıfını kullandım çünkü özellikle yani başlan bir çok kişi bu sınıfın sürekli aynı sayı ürettiğini düşünüyor. Ama kaçırdıkları şey sınıfı sürekli baştan yaratmaları. Ve bunun bir döngü içinde olduğu düşünülürse mikro saniyeler seviyesinde sayı değişimi çok da fazla olmayacaktır. İstenilen yerde :
Hani oyunlarda şifreler olur ya bu da windows’un enteresan ve kullanışlı bir şifresi diyebiliriz. Yazdığınızda bütün ayarların tek bir elde toplanması bayağı bir işe yarıyor.
Şİmdi bir klasör oluşturun ve adını :
koyun. Göreceksiniz ki simgesi değişecek. İçine girdiğinizde ise normal yollardan bulunması çok zor olan bir çok ayar artık elinizin altında.
Düşünün ki 100′lerce sayfadan oluşan bir siteniz var ve hepsinde belli yerler sabit. Örnek verecek olursak menüler genelde sabit olur ya da en altta yer alan açıklamalar vs. gibi. Bunların içinde bir yerde değişiklik yapmanız gerektiğinde hepsini tekrar düzenlemeniz gerekiyordu önceleri. Fakat masterpage kavramının gelmesiyle bu sorun ortadan kalktı. Artık sabit olan tarafları masterpage içinde yaratıp normal içerik sayfaları bu masterpage’i kullanarak türeyebiliyor. Sanki yeni gibi anlatıyorum ama bu çıkalı bayağı bir oluyor
hemen küçük bir örnekle konumuzu özetleyelim :
MasterPage.master
Defalut1.aspx
Default2.aspx
Kısaca bir bakalım neymiş bu “swing” kütüphanesi. Aslında windowsform’larda sıkça karşılaştığımız button, label vs. gibi objeleri barındıran bir kütüphanedir. Biraz da kodlayalım bakalım :
//Gerekli kütüphaneleri ekliyoruz
import java.awt.EventQueue;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.WindowConstants;
public class SwingExample {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
//Penceremizi oluşturuyoruz
JFrame f = new JFrame(“swing örnek”);
Şimdi asıl olay şu yaptığımız bir programdan diğer açık olan program pencerelerini nasıl kontrol ederiz? Tabiki user32 DLL’i ile
[DllImport("user32.dll")]
public static extern int FindWindow(
string lpClassName, // class name
string lpWindowName // window name
);
Bu fonksiyon bizim açık olan programı buluyor ve bize onun Windows altındaki ID’sini veriyor. Tabiki “windows name” parametresine programın tam adının yazılması gerekli.
[DllImport("user32.dll")]
public static extern int SetForegroundWindow(
int hWnd // handle to window
);
Burası ise biraz önceki ID değerini alarak, bu ID’ye sahip olan pencereyi ön tarafa getiriyor.
[DllImport("user32.dll")]
public static extern int SendMessage(
int hWnd, // handle to destination window
uint Msg, // message
int wParam, // first message parameter
int lParam // second message parameter
);
Bu fonksiyonla ise açık olan pencereye mesaj gönderebiliyoruz. Mesela klavyeye dokunmadan notpad’i aktif yapıp oraya birşeyler yazabiliriz ![]()
Gerisi sizin hayal gücünüze ve yapmak istediklerinize kalmış. Sormak istediğiniz bir şey varsa çekinmeyin hemen sorun. Mümkün olan en kısa sürede cevaplamaya çalışacağım.
İyi çalışmalar..
Bir makale sitesinde yazıların başlıklarının altalta dizildiğini düşünün ve başlığa tıklandığında o yazıya gitmek istiyoruz diyelim. Bunu datalist ile yapmak istersek yazılacak kod buna cok benzerdir. Yalnızca sayfa ismi yada datasource farklılık gösterebilir.
Datalist’i sayfamıza eklediğimizde “Edit Item Template” kısmında nasıl görünmesini istiyorsak o şekilde dizayn edebiliriz. Mesela ben içine bir tablo attım, tablo içine de bir adet HyperLink attım. Datasource bağlandığı anda ki bu kod tarafında da bağlanabilir, “Baslik” ve “ID” kısmımlarını Eval komutu ile çekiyor.
<asp:DataList ID="DataList1" runat="server" Width="800px" DataSourceID="AccessDataSource2">
<ItemTemplate>
<table >
<tr>
<td>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%#"Post.aspx?ID="+ Eval("ID") %>'
Text='<%# Eval("Baslik") %>'></asp:HyperLink>
</td>
</tr>
</table>
</ItemTemplate>
<ItemStyle BackColor="white" />
</asp:DataList>
<asp:AccessDataSource ID="AccessDataSource2" runat="server"
DataFile="~/App_Data/Forum.mdb"
SelectCommand="SELECT * FROM [Konular] ORDER BY [Tarih] DESC">
</asp:AccessDataSource>
Daha fazla kayıt olduğu durumlarda “AlternatingItemTemplate” de kullanılabilir. Mesela bir satırın mavi bir satırın beyaz olmasını isteyebiliriz. Aşağıdaki bölümü datalist içine eklememiz yeterli olacaktır bunun için.
<AlternatingItemTemplate>
<table >
<tr>
<td>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%#"Post.aspx?ID="+ Eval("ID") %>'
Text='<%# Eval("Baslik") %>'></asp:HyperLink>
</td>
</tr>
</table>
</AlternatingItemTemplate>
<AlternatingItemStyle BackColor="blue" />
Datalistimize Başlık eklemek istersek eğer “HeaderTemplate” tam işimize yarayacak bölüm. Aynı şekilde “FooterTemplate” de mevcut.
<HeaderTemplate> Başlık </HeaderTemplate>
<FooterTemplate> Bu da Alt Kısım </FooterTemplate>

Son Yorumlar