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

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read full post →

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up