DEV Community

Cover image for Dart Abstract and Factory Keywords
Gülsen Keskin
Gülsen Keskin

Posted on

Dart Abstract and Factory Keywords

abstract

Örneklenemeyen bir soyut sınıf (abstract class) tanımlamak için abstract değiştiriciyi kullanın. Soyut sınıflar, genellikle bazı uygulamalarla arabirimleri(interfaces) tanımlamak için kullanışlıdır. Soyut sınıfınızın somutlaştırılabilir(instantiable) görünmesini istiyorsanız, bir factory constructor tanımlayın.

Abstract sınıflar genellikle abstract method'lara sahiptir.

Abstract bir methodu olan abstract bir sınıf örneği:

abstract class AbstractContainer {
  // Define constructors, fields, methods...

  void updateChildren(); // Abstract method.
}
Enter fullscreen mode Exit fullscreen mode

factory

Factory constructors

Sınıfının yeni bir örneğini oluşturmayan bir constructor tanımlarken factory anahtar sözcüğünü kullanın. Örneğin, bir factory constructor önbellekten(cache) bir örnek(instance) döndürebilir veya bir alt türün(subtype) örneğini döndürebilir.
Factory constructor'larının bir başka kullanım alanı da final değişkenleri başlatmaktır.

İpucu: Bir final değişkeninin geç başlatılmasını ele almanın başka bir yolu da late final kullanmaktır (dikkatlice!).

Aşağıdaki örnekte, Logger factory constructor'ı önbellekten nesneler döndürür ve Logger.fromJson factory constructor'ı JSON nesnesinden bir final değişken başlatır.

class Logger {
  final String name;
  bool mute = false;

  // _cache is library-private, thanks to
  // the _ in front of its name.
  static final Map<String, Logger> _cache = <String, Logger>{};

  factory Logger(String name) {
    return _cache.putIfAbsent(name, () => Logger._internal(name));
  }

  factory Logger.fromJson(Map<String, Object> json) {
    return Logger(json['name'].toString());
  }

  Logger._internal(this.name);

  void log(String msg) {
    if (!mute) print(msg);
  }
}
Enter fullscreen mode Exit fullscreen mode

Not: Fatctory constructor'larının 'this'e erişimi yoktur.

Kaynaklar:
https://dart.dev/guides/language/language-tour#abstract-classes
https://dart.dev/guides/language/language-tour#factory-constructors

Latest comments (0)