Last active
January 7, 2023 01:29
-
-
Save RyosukeOK/a9ad94ae10640b67ca4f7bc49fb06b2b to your computer and use it in GitHub Desktop.
区分オブジェクト
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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