在 Java 中工廠類是一個廣泛使用的設計模式泌类,它相比較直接對類進行實例化來說碳柱,具有諸多優(yōu)勢,比如隱藏實例化的具體細節(jié)暖混,提供可以配置為其他類的能力,直接返回一個已有的對象而不是直接返回一個新的對象翁授。
import 'dart:math';
abstract class Shape {
? factory Shape(String type) {
? ? if (type == 'circle') return Circle(2);
? ? if (type == 'square') return Square(2);
? ? throw 'Can\'t create $type.';
? }
? num get area;
}
class Circle implements Shape {
? final num radius;
? Circle(this.radius);
? num get area => pi * pow(radius, 2);
}
class Square implements Shape {
? final num side;
? Square(this.side);
? num get area => pow(side, 2);
}
// Dart 支持抽象類
// 你可以在一個文本中定義多個類
// dart.math 是一個 Dart 核心庫拣播,其余的還有諸如 dart:core,dart:async收擦,dart:convert 和 dart:collection 這樣的核心庫
// 在 Dart 1.x 的版本中贮配,核心庫中的常量是大寫的(比如 PI);在 Dart 2 的版本中塞赂,都是小寫的(pi)泪勒。
// 該代碼包含了兩個 getter 方法,分別用來計算圓的面積和四邊形的面積
// num get area => pi * pow(radius, 2); // Circle
// num get area => pow(side, 2); // Square
Shape shapeFactory(String type) {
? if (type == 'circle') return Circle(2);
? if (type == 'square') return Square(2);
? throw 'Can\'t create $type.';
}
main() {
//? final circle = Circle(2);
//? final square = Square(2);
//? ? final circle = shapeFactory('circle');
//? final square = shapeFactory('square');
? ? final circle = Shape('circle');
? final square = Shape('square');
? print(circle.area);
? print(square.area);
}