Dart言語を勉強しています。
factoryコンストラクタというコンストラクタがあるのですが、
何を意味するのか良く分かりません。
分かる方、教えて下さい。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
factoryコンストラクタは、コンストラクタ内でインスタンスを生成しません。
その代わり、自前でインスタンスを作成する必要があります。
lang
1class Symbol { 2 String name; 3 4 Symbol(String name) { 5 this.name = name; 6 } 7} 8
というクラスがあるとすると、
lang
1Symbol a = new Symbol("a"); 2Symbol b = new Symbol("a"); 3 4assert(a == b); //assert発生(別インスタンス) 5
それに対し、
lang
1class Symbol { 2 String name; 3 static var _instance; 4 5 factory Symbol(String name) { 6 7 if(_instance == null){ 8 _instance = new Symbol._internal(name); 9 } 10 return _instance; 11 } 12 13 Symbol._internal(this.name); 14}
というクラスがあるとすると、
lang
1Symbol a = new Symbol("a"); 2Symbol b = new Symbol("a"); 3 4assert(a == b); //assert発生せず(同一インスタンス) 5
となります。自前でシングルトンでインスタンスを作っているのがわかりますね。
投稿2014/10/08 02:30
総合スコア56
0
ベストアンサー
factory コンストラクターではオブジェクトの生成から制御します。
これを使って Singleton パターンのオブジェクトを作ることができます。
例えば、次のように factory コンストラクターを書いておけば、MouseCtrl のオブジェクトはプログラムで唯一ひとつだけ作られるようになります。
lang
1class MouseCtrl { 2 static var _obj; 3 4 factory MouseCtrl() { 5 if(_obj == null){ 6 _obj = new MouseCtrl._internal(); 7 } 8 return _obj; 9 } 10 11 MouseCtrl._internal(); 12}
オブジェクトを作る場合の記述は通常のクラスと同じです。
lang
1 var x = new MouseCtrl(); 2 var alsoX = new MouseCtrl(); 3 print(identical(x, alsoX)); // true
というように factory コンストラクターを使えば、他のクラスと変わらない書き方でシングルトンのオブジェクトを作ることができるようになります。
ただ、個人的にはそれが良いことなのかどうかは微妙だと思っています。
投稿2014/10/08 05:50
総合スコア863
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。