FlutterのFactoryコンストラクタとは?わかりやすい使い方と実装方法

Flutter基礎

Flutterアプリ開発でFactoryコンストラクタを使う場面が増えてきましたが、使い方やメリットを忘れがちです。

この記事では、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という文字列とguardDogというbool型の引数を定義することですっきり直感的にかけました。

class Dog{
 String name;
 Dog(this.name);
 
 factory Dog.createDog({required String name,bool guardDog=false}){
     if(guardDog == true){
       return Doberman(name);
     }
     else{
       return Labrador(name);
     }
  }
}

あとは、ドーベルマンを使用したい場合は記のように使用します。

Dog myGuardDog= Dog.createDog(name:’Rocky’,guardDog:true);

定義であった下記部分ができたかなと思います。
ロジックとオブジェクトを分離することができた。

ロジックをクライアントに公開することなくオブジェクトを作成

最後に

Factoryを使用することで、コードのメンテナンスが容易になる場面や複数の条件分岐をシンプルに表現できる場面で効果的です。


ではまた。

コメント

タイトルとURLをコピーしました