タグ

design_patternに関するpipeheadのブックマーク (42)

  • クロージャ再考 - Qiita

    はじめに 中級以上のJavaScriptプログラマを目指す上で、避けては通れない壁の一つは クロージャ(Closure) だと思います。「関数の外側で定義された変数を持つ関数の実行時オブジェクトです」とさらっと説明されることが多いですが、シンプルなだけに理解したつもりになって実は使いどころが分からないってことになりがちです。きちんと自分のものにするには基から丁寧に理解しないとダメですねってことで、今回はクロージャについてその背景から調べてみたいと思います。 歴史と語源 まずは歴史から振り返ってみたいと思います。Wikipediaによるクロージャの解説では、以下のような説明があります。 クロージャの概念は、1960年代にラムダ計算の機械的な実行モデルを構築するために生み出され、1970年に 静的スコープ と 第一級関数 をサポートするPALプログラミング言語で最初に実装された。1964年、

    クロージャ再考 - Qiita
    pipehead
    pipehead 2015/09/14
    束縛変数, 自由変数, 環境, 第一級関数, 高階関数, レキシカルスコープ (静的スコープ), ダイナミックスコープ, アクティベーションレコード (スタックフレーム), コールスタック, FUNARG 問題, クロージャ, モジュールパターン
  • JavaでMultiton(マルチトン)パターン | 嫁に下ネタ言うのやめたい

    pipehead
    pipehead 2015/06/12
    > Singletonで実装したけど、後から仕様変更やらなんやらで複数インスタンスにする必要がある。ええい!キーを指定して複数のインスタンスを管理出来るように変更してしまおう! ということになっていると思われる。
  • デザインパターン(Design Pattern)#Facade - Qiita

    設計を意識したコードが書けるようになる為に、デザインパターン修行しました。 他のDesign Patternもちょくちょく出していきます。 前置き 増補改訂版Java言語で学ぶデザインパターン入門をJavaからPythonにしてます。(Pythonは3.4.2) githubにコード置いてあります(まだ動かないものもある) デザインパターンをどういう時に、何を、どう使うのかを理解することが一先ずの目標。 (Javaというか静的型付言語は初めてで、且つpython歴もそんなに長くないので、Pythonistaぽっくないところがあると思います。ご指摘ございましたらご教授ください。) 今回は、構造に関するパターンFacadeパターン。 Facadeとは Facade(ファサード)は複雑なシステムに対するシンプルな窓口の役を果たす。つまり、大型のロジックを簡素化し、1つのシンプルな関数呼び出しにま

    デザインパターン(Design Pattern)#Facade - Qiita
  • デザインパターン(Design Pattern) #Factory Method - Qiita

    設計を意識したコードが書けるようになる為に、デザインパターン修行しました。 他のDesign Patternもちょくちょく出していきます。 前置き 増補改訂版Java言語で学ぶデザインパターン入門をJavaからPythonにしてます。(Pythonは3.4.2) githubにコード置いてあります(まだ動かないものもある) デザインパターンをどういう時に、何を、どう使うのかを理解することが一先ずの目標。 (Javaというか静的型付言語は初めてで、且つpython歴もそんなに長くないので、Pythonistaぽっくないところがあると思います。ご指摘ございましたらご教授ください。) 今回は、生成に関するパターンFactoryMethod。 FactoryMethodとは オブジェクト作成のインタフェースと、オブジェクト生成する役割りを分けて、他のクラスのコンストラクタをサブクラスで上書き可能な

    デザインパターン(Design Pattern) #Factory Method - Qiita
  • デザインパターン(Design Pattern) #Template Method - Qiita

    設計を意識したコードが書けるようになる為に、デザインパターン修行しました。 他のDesign Patternもちょくちょく出していきます。 前置き 増補改訂版Java言語で学ぶデザインパターン入門をJavaからPythonにしてます。(Pythonは3.4.2) githubにコード置いてあります(まだ動かないものもある) デザインパターンをどういう時に、何を、どう使うのかを理解することが一先ずの目標。 (Javaというか静的型付言語は初めてで、且つpython歴もそんなに長くないので、Pythonistaぽっくないところがあると思います。ご指摘ございましたらご教授ください。) 今回は、振る舞いに関するパターンのTemplate Method。 Template Methodとは スーパークラスで処理の枠組みを定め、サブクラスでその具体的内容を定めるようなデザインパターン か。つまり、スー

    デザインパターン(Design Pattern) #Template Method - Qiita
  • デザインパターン(Design Pattern)#Singleton - Qiita

    設計を意識したコードが書けるようになる為に、デザインパターン修行しました。 他のDesign Patternもちょくちょく出していきます。 前置き 増補改訂版Java言語で学ぶデザインパターン入門をJavaからPythonにしてます。(Pythonは3.4.2) githubにコード置いてあります(まだ動かないものもある) デザインパターンをどういう時に、何を、どう使うのかを理解することが一先ずの目標。 (Javaというか静的型付言語は初めてで、且つpython歴もそんなに長くないので、Pythonistaぽっくないところがあると思います。ご指摘ございましたらご教授ください。) まず、そもそもデザインパターンってどういうものかってとこから。 デザインパターンとは ソフトウェア開発におけるデザインパターン(型紙(かたがみ)または設計パターン、英: design pattern)とは、過去のソ

    デザインパターン(Design Pattern)#Singleton - Qiita
  • Gof デザインパターンの勉強メモ記事とブックマークまとめ

    はじめに# 今年の目標は, デザインパターンの攻略! ということで, この一年でまとめた情報や書いた記事のブックマークページです. 過去記事は, RubyJava が入り混じっていたり, 気まぐれでどんどん更新していったので, とてもまとまりがないとおもう. 強引に一つのページにまとめてみた感じ… (*‘д`*) 一年の振り返り# Rubyist になる# 去年の 12 月から Rubyist になった. Rubyist になった日 | Futurismo そして, オブジェクト指向開発に触れることになった. 楽しかったので, 何も考えずにデザインパターンを使ってみたりした. しかし, これはのちに後悔することになった. 保守性よりもスピードを重視するべきだったのに, デザインパターンをつかって, 仕事が遅れてしまったという悲しい思い出. POSA を学ぶ# coursera で P

    Gof デザインパターンの勉強メモ記事とブックマークまとめ
    pipehead
    pipehead 2014/12/30
    デザインパターンの一覧あり〼
  • プログラミング初心者向けのシンプルなObserverパターンの解説 - タオルケット体操

    まえおき デザインパターンに関しては色々言われていますね。 個人的には、「確かに微妙だし全体的に時代遅れっぽいけど基礎教養みたいなもんなので基情報技術なんぞを受ける暇があるなら一通り目を通しておいてもいんじゃねえの?」っていう立場です。 微妙っぽい感じなものが多いデザインパターンなんですが、それでもちゃんと押さえておいた方がいいよねっていうものの一つがオブザーバーパターンです。 アプリケーション的なプログラミングをしていると絶対に避けて通れないパターンなんですけども、以外と存在も意味も知らずになんとなくとコピペで済ませている人に未だにめっちゃ出会うのでちょっとした危機感だよねっていうのが現状です。 このパターンはみんな大好きMVCの基礎となっている設計手法で、Webとかスマホアプリだとかをちゃんとやるには避けて通れないんだ。一切勉強もせずに聞きかじりの知識で「今さらデザパタの記事とかww

    プログラミング初心者向けのシンプルなObserverパターンの解説 - タオルケット体操
  • ステップアップのためのJavascriptデザインパターン入門(5) 【シングルトンパターン】

    このブログでのデザインパターン連載も5回目になってやっと連載らしくなってきました。 引き続き今回はシングルトンパターンを紹介します。 シングルトンパターン オブジェクトのインスタンスの生成を1つに制限する、というのがシングルトンパターンです。 手軽に実装するには以下のようにオブジェクトリテラルを使用することで実装できます。 var Singleton = { prop: 1, another_prop: 'value', method: function() {…}, another_method: function() {…} }; しかし、これではプライベート・パブリックの区別ができません。全てのプロパティ、メソッドにアクセスできてしまいます。 シングルトンパターンの常套手段としては、インスタンスが作成されていなかったら作成し、すでに作成されている場合はそのインスタンスを返します。 サ

    ステップアップのためのJavascriptデザインパターン入門(5) 【シングルトンパターン】
    pipehead
    pipehead 2014/09/21
    Singleton パターン
  • ステップアップのためのJavascriptデザインパターン入門(4) 【リビーリングモジュールパターン】

    今回はリビーリングモジュールパターンを紹介します。 リビーリングモジュールパターン このパターンはクリスチャン・ヘイルマンという人による、モジュールパターンを改良したパターンです。 全ての関数と変数をプライベートスコープ内で定義し、パブリックメンバとして公開したいプライベートメンバへのポインタを持つ無名オブジェクトを返します。 var myRevealingModule = function() { var privateVar = 'Hoge', publicVar = 'Foo'; function privateFunction() { console.log('Name:' + privateVar); } function publicSetName(strName) { privateName = strName; } function publicGetName() { pr

    ステップアップのためのJavascriptデザインパターン入門(4) 【リビーリングモジュールパターン】
    pipehead
    pipehead 2014/09/14
    Revealing Module パターン
  • ステップアップのためのJavascriptデザインパターン入門(3) 【モジュールパターン】

    前回はコンストラクタパターンについて紹介しました。 今回はモジュールパターンについて紹介します。 モジュールパターン 従来のJavascript以外でのモジュールパターンというのは、クラスにパブリックとプライベートの両方のカプセル化をもたらす方法でした。 しかし、前回Javascriptにはクラスの概念が無いということを書きました。 Javascriptではクラスのような実装をモジュールパターンで再現することができます。 モジュールパターンを使用することで、1つのオブジェクトにパブリック・プライベートなメソッドや変数を取り込み、グローバルから特定の部分を隠蔽できます。 グローバル空間での変数名や関数名の衝突がしづらくなるわけです。 モジュールパターンでは、クロージャを使い変数やメソッドの隠蔽を実現します。 var testModule = (function() { // カウンタ変数 v

    ステップアップのためのJavascriptデザインパターン入門(3) 【モジュールパターン】
    pipehead
    pipehead 2014/09/10
    Module パターン
  • ステップアップのためのJavascriptデザインパターン入門(2) 【コンストラクタパターン】

    前回は第1回目ということで、そもそもデザインパターンとはなんぞや?という話に触れました。 今回から具体的なデザインパターンについて紹介していきます。 コンストラクタパターン コンストラクタ(Constructor)とはオブジェクトを作成し、初期化する関数のことです。 コンストラクタはJavascript以外の言語では「クラス」と呼ばれています。 プロトタイプベースの言語であるJavascriptでは、クラスの概念がありませんが、コンストラクタを作成することでクラスに似たオブジェクトを作成することができます。 コンストラクタは、オブジェクトを使用するための準備を行い、引数を受け取りオブジェクトの初回作成時にメンバのプロパティやメソッドに値を設定するのに利用します。 // コンストラクタを定義する function Person(name, age) { this.name = name; t

    ステップアップのためのJavascriptデザインパターン入門(2) 【コンストラクタパターン】
    pipehead
    pipehead 2014/09/09
    Constructor パターン
  • Javaプログラマから見たJavaScriptデザインパターン(アクセス制御編 其の壱) - Qiita

    シリーズは、構想段階ではデザインパターンを淡々と列挙していく記事にしようと思っていたが、なかなかまとまらないので、備忘録ついでに今考えていることをそのまま投稿してしまうことにした。 (訳:いきあたりばったりで体系的ではありません。) ## 出来ればそのうち整理しよう…。 ※ JSの知識には自信ないので間違った点に気付いた方がいらしたらコメント等でご指摘いただけると助かります。 ※ 稿は直接的な「デザインパターン」についてはあまり焦点があたっていないのでご了承ください。 0.はじめに 編案内 Moduleパターンを利用したアクセス制御について紹介する。 編を通して、JSにおけるアクセス制御の一例を見てみる。 シリーズ案内 Javaプログラマから見たJavaScriptデザインパターン(導入編) シリーズの前提条件及びModule、Singleton、FactoryMethodパター

    Javaプログラマから見たJavaScriptデザインパターン(アクセス制御編 其の壱) - Qiita
    pipehead
    pipehead 2014/09/07
    Interceptor パターン
  • Javaプログラマから見たJavaScriptデザインパターン(導入編) - Qiita

    仕事などでJSを書くようになって少々経つが、Java信者で頭が固い僕にとってはどうもJSというのは柔らかすぎてしっくりこない部分が多い。 考え方を整理するにはデザインパターンを知るのが早いと、最近思い立ったので改めて調べてみた。 ということで、Javaは大体分かるし、JSも書くけどそこまで詳しくない人向け(つまり自分主体)にまとめておく。 今のところシリーズ化予定。 ※ JSの知識には自信ないので間違った点に気付いた方がいらしたらコメント等でご指摘いただけると助かります。 ※ デザインパターンとして挙げているコードは、個人的にアレンジしている場合がありますので、ご了承ください。 0.はじめに 編案内 内容に入る前に、予備知識をおさらい。要点ではないのでざっくり。 シリーズ案内 Javaプログラマから見たJavaScriptデザインパターン(導入編) Javaプログラマから見たJavaSc

    Javaプログラマから見たJavaScriptデザインパターン(導入編) - Qiita
    pipehead
    pipehead 2014/08/27
    Module パターン, Singleton パターン, FactoryMethod パターン
  • switch文を使ってはいけない

    昔Qiitaで書いた内容なんですが、PHPswitch文は悪名高い「==」演算子で比較を行います。 <?php switch (true) { case 0: echo '数字の0'; break; case '0': echo '文字列の0'; break; case '0.0': echo '文字列の0.0'; break; case true: echo '真偽値のtrue'; break; } このコードは「文字列の0.0」を出力します。大変分かりにくいですね。 この点はif ... elseif ...を使えば解決するんですが、switchで書きたくなるようなコードをelseifにするとおそらく読みにくくなるでしょう。 ではどうするか。 正解はオブジェクトのポリモーフィズム(多態性)機能を使うことです。 といっても、多態性で調べて出てくる記事とか書籍に関しては抽象的な説明が多い

    switch文を使ってはいけない
    pipehead
    pipehead 2014/08/14
    State パターン
  • Reveling Prototype Patternについて - Hachirog

    前回はReveling Module Patternについて書きました。JavaScriptでもprivateとpublicの領域を明快に分けられるという利点がありましたが、複数のインスタンスを作る際に、privateな関数もpublicな関数ももろもろが複製されるので、あまり効率が良くなさそうというのが懸念でした。 そこで、その点を補ったのがReveling Prototype Pattern(リビーリングプロトタイプパターン)ということで、紹介記事を読んで試してみました。 Revealing Prototype Pattern - Techniques, Strategies and Patterns for Structuring JavaScript Code - Dan Wahlin Revealing Prototype Patternによるオブジェクトの作り方 //最初にコン

    Reveling Prototype Patternについて - Hachirog
  • Revealing Module Patternで盲点だったこと - Hachirog

    これまで業務ではJavaScriptを場当たり的にコーディングしてきたので、今年は基的なところから見直そうと思っています。JavaScriptの実装でいつもに気になっていたのがオブジェクトの生成で、どういった書き方が定石なのか、で調べてもネットで調べてもいろいろ意見があって悩ましいところでした。 その中で、良さそうと思ったのが『JavaScriptデザインパターン』の中でも紹介されている「リビーリングモジュールパターン(Revealing Module Pattern)」です。 JavaScriptデザインパターン 作者: Addy Osmani,豊福剛,サイフォン合同会社出版社/メーカー: オライリージャパン発売日: 2013/05/25メディア: 大型この商品を含むブログ (6件) を見る Revealing Module Patternによるオブジェクトの作り方 『JavaSc

    Revealing Module Patternで盲点だったこと - Hachirog
  • javascriptのモジュールパターンとprototype継承について - tanihiro.log

    jsを書くとき、今まであまりprototype継承を使用せず、どちらかというとモジュールパターンで記述することが多かったので、それぞれ何が違うのか、あまり理解していませんでした。 それを今日教えてもらえたので、まとめます。 モジュールパターンとは function Hoge() { var n = 1; return { fuga: function() { alert(n); } }; } var hoge = new Hoge; hoge.fuga(); // 「1」がalertで表示される hoge.n; // Error このように、関数の返り値をobjectで返し、さらにそのobjectの中にfunctionを用意します。 fugaの中で参照しているnはクロージャの中で生き続けるので、外からでもアクセスできますが、直接は参照できません。 この、クロージャを利用してprivateや

    javascriptのモジュールパターンとprototype継承について - tanihiro.log
    pipehead
    pipehead 2013/11/21
    > モジュールパターンはprivateな変数やメソッドを簡単に定義できるが、継承はできない
  • JavaScriptのIIFEとモジュールパターン | fenomas.com

    他の多くのフラッシャーと同じく、最近色々HTML5開発を触ってみている。(現時点ではEdge Animateで色々を。)で、JSはAS3とかなり似ているため、それほど慣れにくくはない。(ほとんどのJSはAS3としてでもコンパイルできるし。JSを横目で見たら、変数の型を宣言しない人が書いたAS3と見間違えられる。) ただしJSとAS3は似ている言語にしても、使われる方言が違う。例えばこれ: 最初は「はあ?」と思った。でもJSにはよ〜くあるのだ。このパターンは英語圏で「IIFE」(イッフィー)とよばれる:「Immediately-invoked function expression」。つまり即時に実行される関数エクスプレッション。まあ、コードを見ればそういうもんですね。(@spacelogueさんによると日語では即時関数というんだって) まあそれはそれで良いんだが、何のために使うのだろう?

    pipehead
    pipehead 2013/06/06
    IIFE: Immediately-invoked function expression (即時関数)
  • デザインパターン(ストラテジパターン)について - Java Solution会議室

    IT会議室 新規書き込み停止(2012年10月9日)のお知らせ @ITの会員制度「@ITクラブ・メンバーシップ」(@ITクラブ)は、10月9日より、弊社が運営するメディアの共通会員制度である「アイティメディアID」へ移行することになりました。これに伴い、@ITクラブのサービスの一部を変更させていただきます。 @IT会議室については、2012年10月9日をもって新規書き込みを終了いたしました(閲覧は引き続き可能です)。今後、質問や回答などは「QA@IT」(http://qa.atmarkit.co.jp/)をご利用くださいますよう、お願い申し上げます。 デザインパターンの一つであるストラテジパターンについて下記のサイトを読んでいて よくわからなかったので質問させてください。 http://ja.wikipedia.org/wiki/Strategy_%E3%83%91%E3%82%B