Factoryコンストラクタについて使う機会が増えその度に忘れちゃうので備忘録として記載します。
誤り等あればお気軽にご意見ください。
ファクトリーデザインパターンの定義
「Factory」は日本語で「工場」ですが、flutterにおけるFactoryとはどういうなのか。
まずはファクトリーデザインパターンの定義では以下の通り。
ロジックをクライアントに公開することなくオブジェクトを作成し、共通のインターフェイスを用いて新しく作成されたオブジェクトを参照する。
サンプル(Factory未使用)
犬クラスのサブクラスとしてラブラドールとドーベルマンクラスを作成。
class Dog{
String name;
Dog(this.name);
}
class Labrador extends Dog{
Labrador(String name):super(name);
}
class Doberman extends Dog{
Doberman(String name):super(name);
}
犬に守ってもらいたい場合(isGuardianがtrue)ドーベルマンをそうじゃない場合(falseの場合)はラブラドールを呼んでいます。
void main(){
Dog dog;
String name='tommy';
bool isGuardian= false;
if(isGuardian == true) {
dog = Doberman(name);
} else{
dog = Labrador(name);
}
}
この方法でも問題ありません。しかし、もし複数の場面でこの機能を実装する場合に都度if分を書いたりするのはイケてない。
そこでFactoryを使って直感的にかける。(そうです…)
サンプル(Factory使用)
犬クラスを継承したcreateDogというコンストラクタを使います。
引数としてnameという文字列とgaurdDogというbool型の引数を定義することですっきり直感的にかけました。
class Dog{
String name;
Dog(this.name);
factory Dog.createDog({required String name,bool gaurdDog=false}){
if(gaurdDog == true){
return Doberman(name);
}
else{
return Labrador(name);
}
}
}
あとは、ドーベルマンを使用したい場合は記のように使用します。
Dog myGaurdDog = Dog.createDog(name:’Rocky’,gaurdDog:true);
定義であった下記部分ができたかなと思います。
ロジックとオブジェクトを分離することができた。
ロジックをクライアントに公開することなくオブジェクトを作成
最後に
まだ完全に理解できたわけではないですが、さわり程度理解できました。
詳細なものがわかれば随時更新していきたいと思います。
ではまた。
コメント