Code Monkey home page Code Monkey logo

design_patterns's Introduction

Design Patterns

Bir tasarım deseni, yazılım tasarımında yaygın olarak ortaya çıkan bir soruna genel olarak tekrarlanabilir bir çözümdür. Bir tasarım deseni, doğrudan koda dönüştürülebilen bitmiş bir tasarım değildir. Birçok farklı durumda kullanılabilecek bir problemin nasıl çözüleceğine dair bir açıklama veya şablondur.

Creational Patterns - Yaratılış Desenler

Yaratıcı tasarım kalıpları, duruma uygun bir şekilde nesneler yaratmaya çalışan, nesne oluşturma mekanizmalarıyla ilgilenen tasarım kalıplarıdır. Temel nesne oluşturma biçimi, tasarım sorunlarına veya tasarıma ek karmaşıklıklara neden olabilir. Yaratıcı tasarım kalıpları, bu nesne oluşumunu bir şekilde kontrol ederek bu sorunu çözer.

Builder Tasarım Deseni, bir nesnenin oluşum aşamasında farklı nesnelere de ihtiyaç olduğu durumlarda kullanılır. Yani karmaşık yapıdaki bir nesne, değişik özelliklerin(nesnelerin) bir araya gelmesiyle oluşur. Birden fazla adım barındıran nesne üretim sürecinde, farklı parçalar birleştirilir ve istenilen tipteki nesne oluşturulmuş olur.

Builder

Factory Tasarım Deseni, bu tasarım deseni bir nesne yaratmak için arayüz sağlar ve hangi sınıftan nesne yaratılacağını alt sınıfların belirlemesine olanak tanır. Asıl amaç oluşturmak istediğimiz sınıfların tek tek instance oluşturmak yerine bu oluşturma işlemini tek bir sınıf üzerinden yönetmek.

Factory

Singleton Tasarım Deseni, bir sınıfın tek bir örneğini almak için kullanılır.Amaç oluşturulan nesneye global erişim noktası sağlamaktır.Sistem çalıştığı sürece ikinci bir örnek oluşturulmaz, böylelikle istenen nesnenin tek bir defa oluşturulması garanti altına alınacaktır.Singleton nesneler ilk çağırıldıklarında bir kere oluşturulurlar ve sonraki istekler bu nesne üzerinden karşılanır.

Singleton

Structural Patterns - Yapısal Desenler

Yapısal Tasarım Modelleri, varlıklar arasındaki ilişkileri gerçekleştirmenin basit bir yolunu belirleyerek tasarımı kolaylaştıran Tasarım Modelleridir.

Adaptör Tasarım deseni, mevcut bir sınıfı veya arayüz sınıfını, eldeki farklı bir arayüz sınıfına uygun hale getirerek tekrar kullanmak amacıyla uygulanır. Çoğu zaman işe yarayacağını düşündüğümüz mevcut bir sınıfı kendi sistemimizde tekrar kullanmak isteriz. Fakat mevcut sınıf, tam beklediğimiz gibi olmayabilir. Bu durumda araya bir tane adaptör yazarak, mevcut sınıfı kendi sistemimize uygun hale getirebiliriz. Böylece adapte edilen nesnede kod değişikliği olmadan benzer bir arayüzü destekler hale getiririz. Ayrıca adaptasyon işlemi sırasında, adapte edilen nesnenin desteklemediği özellikler de adaptör tarafından gerçekleştirilebilir.

Adapter

Bridge Tasarım Deseni, soyutladığımız nesneler ile işi gerçekleyecek somut nesneler arasında köprü kurar. Soyut sınıflar ve işi yapacak sınıfları birbirinden ayırdığı için iki sınıf tipinde yapılcak bir değişiklik birbirini etkilemez. Hangi sınıfın kullanılacağına çalışma zamanında karar verilir. Bu mekanizma sayesinde çalışma alanında, gerçek işi yapan sınıf değiştirilebilir.

Bridge

Decorator Tasarım Deseni, soyutlayarak gevşek bağlılığı sağladığımız sistemimizde mevcut yapımız için yeni metotlar ekleneceği zamanlar kullanılır. Sistemin yapısını bozmadan dinamik metotlar ekleyebileceğimiz bir yapıdadır. Sistemi bu hale getirebilmek için yapının arayüzünden türeyen bir adet decorator sınıfı yazılır. Yazılan bu sınıfın içerisinde kendi türediği sınıfa bir bağımlılık yani referans barındırır. Anlaşılması başta karmaşık gelen bu desen, yeni eklenen yetenekler için kullanılır.

Decorator

Behavioral Patterns - Davranış Desenler

Davranışsal tasarım kalıpları, nesneler arasındaki ortak iletişim kalıplarını tanımlayan ve bu kalıpları gerçekleştiren tasarım kalıplarıdır. Bunu yaparak, bu modeller bu iletişimin gerçekleştirilmesindeki esnekliği artırır.

Chain of Responsibility Tasarım Deseni, kod karmaşasını önlemek amacıyla oluşturulmuştur. Bir işlemi yapabilecek birden fazla sınıftan hangisinin yapacağına karar veren tasarım desenidir. Projelerimizde birden fazla koşullu metotlar yazmak istediğimizde her koşul için if else blokları açılır ve ilgili metotlar çalıştırılmaktadır. Bu yapıyı if else blokları yerine chain of responsbility ( sorumluluk zinciri ) tasarım desenini kullanılır. Bu tasarım deseninde 3 ana yapı vardır. Handler : Kendisinden türeyecek ConcreteHandler’ ların, işleyebilmesi için gerekli olan arayüzdür. Abstract class yada Interface şeklinde tanımlanabilir. ConcreteHandler : Gelen isteğe cevap verebilecek gerekirse isteği kendisinden sonra gelen nesneye iletir. Client : Zinciri oluşturan ve zincirin ilk halkasına isteği gönderen nesnedir.

Chainofresponsibility

Mediator Tasarım Deseni, birçok bileşenin birbirinden servis kullandığı ve bu servis kullanımlarından dolayı bağımlılıkların çok arttığı durumlarda bu bağımlılıkları merkeze taşıyarak bağımlılık kaosunu çözen bir yaklaşımdır.

Mediator

Observer Tasarım Deseni, nesneler arasında one-to-many ilişkisi olduğu durumlarda tercih edilen bir desendir. Yani bir nesnede olan herhangi bir değişiklik, bu nesneye bağımlı diğer nesneleri de etkiliyorsa bu desen kullanılır.

Observer

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.