Volkan ALBAYRAK

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.

Yöntem.cs

interface Yöntem
{
void Gez();
}

Araba.cs

class Araba : Yöntem
{
public void Gez()
{
MessageBox.Show(“arabayla geziyorum”);
}


}

Bisiklet.cs

class Bisiklet : Yöntem
{
public void Gez()
{
MessageBox.Show(“bisikletle geziyorum”);
}


}

YöntemFabrikası.cs

class YöntemFabrikası
{
public Yöntem yöntemYarat(string opt)
{
if (opt == “arabayla”)
return new Araba();
else if(opt==”bisikletle”)
return new Bisiklet();

return new Araba();//if’lere girmezse


}


}

ve kullanacağımız yer

string parametre = //istenilen yerden dinamik olarak çekilebilir
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.

Basit bir örnek verelim :
class RandomSayıVerici
{
private RandomSayıVerici() { }
private static Random r = new Random();

public static Random nesneAl()
{ return r; }
public static int sayiVer(int min, int max)
{
return r.Next(min, max);
}
public static int sayiVer(int max)
{
return r.Next(max);
}
public static int sayiVer()
{
return r.Next();
}
}

Ş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 :

TextBox1.Text += RandomSayıVerici.sayiVer(0, 53).ToString() ;
şeklinde kullanılması yeterli.
İyi çalışmalar..

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ı :

GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}

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

Burada göreceksiniz ki html sayfasında olması gereken ana tag’ler var. Çünkü buradan türeyen sayfalar body taginin içinde yer alan contentpalceholder içine gömülürler serverde işlenirken.

Defalut1.aspx

Hemen solutionExplorer’dan oluşturduğumuz masterpage’e sağ tıklayıp “add content page” diyoruz.Türeyen sayfada hiçbir html tagi bulunmuyor çünkü onlar zaten masterpagede var. Hemen en başta MasterPageFile=”~/MasterPage.master” dikkatinizi çekmiştir. Türeyen sayfalarda “content” tagi bulunur ve sayfa tasarım ve içeriği bu iki tag arasına gömülür.

Default2.aspx

Ayrıca bir sayfanın birden fazla masterpagei olabilir. Bunun faydalarından birisi de; hatta hemen örnek vererek açıklayalım. Bir üniversite sitesi olsun bunun bir ana sayfası var yukarıda üniversite logosu olan. 5 adet fakülte var üniversitede. ve her bir fakültede ayrı ayrı acıklamalar vs var. Bunun tasarımında biden fazla masterpage kullanmak yararımıza olacaktır. Bir tanesi en üstte yer alıp sadece üniversite logosunu ve ana menüleri taşır. Bundan türeyen fakülte masterpage’leri kendi fakültesine özgü menüleri taşır. Ana masterdan türedikleri için üniversite logosunu da taşımış olurlar. ve artık ürettiğimiz fakülte masterpagelerinden dilediğimiz kadar dinamik içerik sayfaları oluşturabiliriz :)

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”);

  Devamını okuyun »

Ş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>

		
© 2010 bilyaz.com , Programlama Makaleleri, Yazılım Makaleleri , Örnek Kodlar , Eğitim Videoları , C#,ASP.NET,SQL,PHP Suffusion WordPress theme by Sayontan Sinha