design-patterns

Quick-reference guide to software design patterns with concise Dart examples.

View project on GitHub

Restricts write access to class attributes by encapsulating them in a separate data object.

Prevents unintended modification after initialization.

class CircleData {
  final double radius;
  final String color;

  CircleData(this.radius, this.color);
}

class Circle {
  final CircleData _data; // immutable after construction

  Circle(double radius, String color) : _data = CircleData(radius, color);

  double get area => 3.14159 * _data.radius * _data.radius;
  String get color => _data.color;
}

// Usage
final circle = Circle(5, 'red');
print(circle.area);  // 78.53975
print(circle.color); // red
// _data fields cannot be changed after construction