Skip to content

Instantly share code, notes, and snippets.

@RyosukeOK
Last active January 7, 2023 01:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RyosukeOK/a9ad94ae10640b67ca4f7bc49fb06b2b to your computer and use it in GitHub Desktop.
Save RyosukeOK/a9ad94ae10640b67ca4f7bc49fb06b2b to your computer and use it in GitHub Desktop.
区分オブジェクト
void main() {
// e.g. 画面のドロップダウンリストで選択された区分名から対応する区分オブジェクトを探す
final selectedFeeTypeName = 'adult';
final fee = FeeFactory.feeByName(selectedFeeTypeName);
print(fee);
assert(fee.yen().value == Yen(100).value);
}
/// 円の値オブジェクト
class Yen {
const Yen(this.value);
final int value;
}
class FeeFactory {
static Map<String, Fee> types = {
'adult': AdultFee(),
'child': ChildFee(),
'senior': SeniorFee(),
};
static Fee feeByName(String name) {
return types[name]!;
}
}
abstract class Fee {
Yen yen();
String label();
}
class AdultFee implements Fee {
@override
Yen yen() {
return Yen(100);
}
@override
String label() {
return '大人';
}
}
class ChildFee implements Fee {
@override
Yen yen() {
return Yen(50);
}
@override
String label() {
return '子供';
}
}
class SeniorFee implements Fee {
@override
Yen yen() {
return Yen(80);
}
@override
String label() {
return 'シニア';
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment