Flutter Design Pattern : Factory Method

Furkan Çukur
Halkbank Mobile Tech
3 min readDec 20, 2019

Flutter design pattern Flutter ile bakış açısı.

Öncelikle herkese merhaba. Bir kaç aydır her yönü ile hoşuma giden profesyonel olarak çalıştığımız ve web, mobil(iOS ve Android) ve Fuchsia(Umarım ülkemizde sağlıklı şekilde görebilmeyi umduğumuz işletim sistemi) tek ortamda geliştirmemize imkan sağlayan yeni nesil bir teknoloji. Bugün ise anlatmak istediğim Flutter ile geliştirme yaparken işimizi kolaylaştıracak büyük etkenlerden bir tanesi.

Neler anlatacağım?

1- Factory method design pattern nedir ?

2- Analiz

3- İmplementasyonu

Factory Method Design Pattern nedir ?

GIPHY Link

Öncelikle temeli Creational Design Patterns kategorisine dayanmaktadır. Bu design pattern amaçlarını GoF kitabında açıklanmıştır.

Farklı bir deyişle Factory Method Pattern bir objecti oluşturmaktan sorumlu bir sınıf için interface tanımlar. Bu nedenle interface uygulayan belirli sınıfların başlamasını geciktirir. Objeleri doğrudan kullanan class içinde object oluşturma problemini çözer.

Aynı zamanda, alt sınıflandırma yoluyla compile esnekliği sağlar. Class içerisinde objeler ürettiğinde, objenin başlamasını classtan bağımsız olarak değiştiremediğimiz için esneklik payı yoktur. Class belirleyici bir objeye bağlıdır. Pattern uygulayarak bir objenin üretme şeklini yeniden tanımlamak için alt classlar yazılabilir.

Factory Desing Pattern’i daha iyi kavramak ve anlamak için yapısını ayrıntılı şekilde analizde izleyelim.

Analiz

Factory Desing Pattern’in genel model yapısı bu şekilde görünür.

Image

Creator — Yeni product objelerini döndüren Factory Method’u söyler. Factory Method bütün alt classları uygulayabilmek için abstract gösterilebilir. Ayrıca bu class default bir ContreteProduct objesi döndüren Factory Method için varsayılan uygulama sağlayabilir.

ConcreteCreator— Bir örneği dönmek için Factory Methodu görmezden gelir ve geçersiz kılar. Her seferinde yeni bir product oluşturmak zorunda olmadığını ve örneğin bir objenin cache te bir örneği depolayacağı ve daha sonra Factory Methodu çağırırken geri döneceğini de aklımızdan çıkartmayalım.

Product— Factory Methodu oluşturduğu tüm objeler için ortak bir interface sağlar.

ConcreteProduct — Product interface i uygular. Bu objenin örneği ConcreteCreator class ı tarafından döndürülür.

İmplementasyonu

Factory Methodu design modellerin temel amacı ürün yapan kodu, bu ürünü kullanan kodu ayırmaktır. Yani sonuç olarak farklı ürün eklemek istediğinizde, Factory methodu geçersiz kılan yeni bir alt sınıf oluşturulması gerekmektedir. Bu nedenle çalışmanız gereken objelerin türlerini ve tüm dependenceleri tam olarak bilmiyorsanız seçmeniz gereken kalıp bu olmalıdır.

Factory Method daha önceden söylediğim gibi yeni bir object örneği oluşturmak zorunda değildir. Bu nedenle bazı sistem kaynaklarını korumak ve mevcut object i yeniden oluşturmak yerine yeniden kullanmak istiyorsanız bu yöntemi kullanmak doğru olacaktır. Mesela önceden oluşturulmuş objectlerin yolunu tutan ve bunları geri alan cache veya depolamaya tanıtmak gibi yol alabilir. Belirli bir içerik oluşturucu alt classlardaki çağırırken istenen Factory Methoddaki istenen objedir.

Mimari

Buralara kadar geldiğiniz için anlıyorum ki Flutter öğrenmek istiyor||çalışıyorsunuz.

Flutter ile ne kadar bütün platformlara geliştiriyor olsanız bile mutlaka ayrılması gereken UI noktaları vardır. Bu noktalardan sizlere temel olarak anlatmak istiyorum

Ne kadar Factory Methodun bizlere büyük kolaylıklar sağlamasını istesek de çok fazla olmasa da yardımı dokunuyor. Her platforma ait ortak abstract class ını genişleten bir alt class vardır. UI kodu sadece tüm belirli componentlerin ortak interface ine dikkat etmeli ve mevcut platforma ait widget oluşturmak için uygun olan Factory Methodu çağırmak gerekir. Bu componentlerin kodun belirli yerlere referans vermemesi gerekir.

Akılda daha iyi canlandırmak için,

Yukarıdaki class template i Factory Methodun nasıl uygulandığını göstermektedir.

CustomDialog, belirleyici tüm pop-up ları için basic class olarak kullanılan abstract bir classtır.

getTitle() — Alertin widget ın başlığını döndüren bir abstract method. UI da kullanılan.

create() —Alert widget ın döndüren abstract bir method.

show() — Alert widget ı oluşturmak için ve UI’da gösterebilmek için create() methodu çağırır.

Umarım çalıştıklarımı doğru bir şekilde anlatabilmişimdir. Öğrenmenin en güzel yolu anlatmak || yazmak olduğu fikrine inanıyorum.

İlk makalem olduğu için hataları, yanlışlarım olabilir ilerledikçe hataları sıfıra düşürmeyi hedefliyorum.

Herkese iyi geliştirmeler.

--

--