ループの中のif文が現れたら、Observerパターンを検討する
やはり自分はObserverパターンを理解していなかった。
Observerパターンは、多種多様な輩をループで回す時、真価を発揮する。
以下、よく見るケース。JavaScriptで。
function Student(name, sex) { this.name = name this.sex = sex } var students = [ new Student('野比のび太', 'boy'), new Student('源静香', 'girl'), new Student('剛田武', 'boy'), new Student('骨川スネ夫', 'boy') ] for (var i = 0; i < students.length; i++) { if (students[i].sex === 'boy') { console.log('ムフフ、女子の着替え覗いちゃおうかなぁ。') } else if (students[i].sex === 'girl') { console.log('変態男子!ケダモノ!') } }
ムフフ、女子の着替え覗いちゃおうかなぁ。
変態男子!ケダモノ!
ムフフ、女子の着替え覗いちゃおうかなぁ。
ムフフ、女子の着替え覗いちゃおうかなぁ。
ループの中にif文。分岐が多いのは良くない。
これがネストしたり、else if が何個も続くと、見てるだけで気分が悪くなってくる。
こういう時は、Observerパターンを使う。
function Boy() { Student.apply(this, arguments) } Boy.prototype.say = function () { console.log('ムフフ、女子の着替え覗いちゃおうかなぁ。') } function Girl() { Student.apply(this, arguments) } Girl.prototype.say = function () { console.log('変態男子!ケダモノ!') } var students = [ new Boy('野比のび太', 'boy'), new Girl('源静香', 'girl'), new Boy('剛田武', 'boy'), new Boy('骨川スネ夫', 'boy') ] for (var i = 0; i < students.length; i++) { students[i].say() }
ムフフ、女子の着替え覗いちゃおうかなぁ。
変態男子!ケダモノ!
ムフフ、女子の着替え覗いちゃおうかなぁ。
ムフフ、女子の着替え覗いちゃおうかなぁ。
最後のfor文からifが消えた。
Observerパターンが実はとんでもない汎用性があることに今さら気付いた。