タグ

デザインパターンに関するmasudaKのブックマーク (20)

  • [保存版]人間が読んで理解できるデザインパターン解説#1: 作成系(翻訳)|TechRacho by BPS株式会社

    こんにちは、hachi8833です。今回から3回に渡って『Design Patterns for Humans』の日語訳を公開します。あえてクラス図などを使わず、デザインパターンをストーリーで理解できるように書かれた異色のデザインパターン解説です。 #1 作成系デザインパターン(記事) #2 構造系デザインパターン #3 振舞い系デザインパターン 概要 原著者の許諾を得て、MITライセンスに基づき翻訳・公開いたします。 英語記事: Design Patterns for Humans™ - An ultra-simplified explanation 更新日: 2017/09/25 著者: Kamran Ahmed サイト: Hugobots -- 開発者向けのニュースレターを発行しています。 「Design Patterns for Humans」は商標(TM)です。 2017/1

    [保存版]人間が読んで理解できるデザインパターン解説#1: 作成系(翻訳)|TechRacho by BPS株式会社
  • 19.State パターン

    19.1 State パターンとは 第19章では State パターンを学びます。State とは、英語で「状態」を意味する単語です。 オブジェクト指向設計では、モノをクラスとして表現することが多くあります。State パターンとは、 モノではなく、「状態」をクラスとして表現するパターンです。 状態によって、動作のパターンが変わることがよくあります。 例えば、「機嫌のいい状態」「機嫌が悪い状態」の2つの状態があるお母さんにいくつか頼みごとをすることを考えます。 機嫌のいい状態のお母さんに「お小遣い頂戴」「おやつ頂戴」などのお願いをした場合、 「はいはい」といってお小遣いをくれたり、おやつを出してくれたりするでしょう。 しかし、機嫌の悪い状態のお母さんにこれらのお願いをしても聞き入れてくれないかもしれません。 お母さんは状態によって、振る舞いが変わるわけです。 State パターンとは、この

  • Factory (ファクトリ) パターン

    Factory パターンって、Abstract Factory パターンのことを言ってるの?それとも Factory Method パターンのこと? と疑問に思う方もいらっしゃると思いますが、ここでは両者をまとめて解説します。 誤解をおそれずに言うなら、両者にはたいした違いはありません。 この「たいした」の部分のについては、説明を読んでいただければわかるかと思います。 コンテンツ Factory ってなに? それをやるとなにが嬉しいのか? インタフェースで依存度を下げてみる 問題はコンストラクタ ファクトリを使って依存をなくす ファクトリの可能性 Abstract Factory と Factory Method の違い Abstract Factory パターンとは Factory Method パターンとは Factory パターンの応用 Factory ってなに? 直訳すれば工場です

  • 【PHPで学ぶデザインパターン入門】第5回 Factoryパターン | 株式会社LIG(リグ)|DX支援・システム開発・Web制作

    こんにちは、王です。 【PHPで学ぶデザインパターン】第5回はFactoryパターンのご紹介となります。 Factoryパターンの考え方は実に簡単です。「クラスのインスタンス化業務を肩代わりしてくれるオブジェクト」を導入していれば「Factoryパターン」と言っていいのです。 要はクラスのインスタンス化を行う時に、自分でnew TheClass()するのではなく、factory.create('the_class')のように、「誰か」に代わりにやってもらうのです。その「誰か」が「Factory」です。いわば、オブジェクトを作るオブジェクトですね。「オブジェクトの製造所」 → 「Factory」というわけです。 インスタンス化で複雑なオプションが必要なときに活かせるパターンです。逆に言えば、インスタンス化がさほど難しくない場合には適用すべきではありません。必要以上にアプリケーションが複雑化す

    【PHPで学ぶデザインパターン入門】第5回 Factoryパターン | 株式会社LIG(リグ)|DX支援・システム開発・Web制作
  • Javaで書くBuilderパターンのパターン - Qiita

    個人的にBuilderパターンはオブジェクトの生成制御や、ものによっては可読性が高くて好きなパターンなんですが、その実装には用途によっていくつかパターンがあるので、まとめてみました。 生成するオブジェクトの条件 クラス名:People フィールド:String name(必須), Integer age(必須), String hobby(オプション) 必須要素はnullを禁止 PeopleクラスはStringを返り値とするhelloメソッドを持つ 今回はBuilderパターンの比較のため、パターン上必要でない限りgetterなどのメソッドは省略 Native Builder Builderパターンではなく、ただのコンストラクタ。Builderパターンを使いたくなるのはこれをやりたくないからだけど、比較のために記載。 class People { private String name;

    Javaで書くBuilderパターンのパターン - Qiita
  • やはりあなた方のDependency Injectionはまちがっている。 — A Day in Serenity (Reloaded) — PHP, FuelPHP, Linux or something

    今日はPHP界隈で大人気のDependency Injectionと、それに関連する用語について整理しておこうと思います。 以下のような状況があるのではないか?と思ったからです。 多くのPHPユーザがDependency Injection(DI)をよくわかっていない、あるいは正確に説明できません。 そして、デザインパターンである「DIパターン」とDIをサポートするツールである「DIコンテナ」を混同しています。 また、「DIパターン」と「サービスロケータパターン」をうまく区別できていません。 Dependency Injectionとは何か? Dependency Injectionとは「Dependency」を「Injection」するというデザインパターンです。 日語では何故か「依存性の注入」と訳されており、これが混乱の元ではないかと思います。 日語で「依存性」と言うと、「依存性は

  • 例えば, Singleton を避ける | Born Too Late

    この記事は TDD Advent Calendar jp: 2011 の 14 日目です. 前日: TDD戦略 -TDDを導入し進化させる方法- #TDDAdventJP (@kyon_mm さん) 翌日: TDDに対して思っていること (@gab_km さん) この記事の概要 TDD で開発することで設計上の問題点に気づきやすくなる Singleton はグローバル変数である Singleton の使用はできる限り避けるべきである テスタビリティを意識しよう TDD では, 原則としてユニットテストを書いてから実際のコードを実装します. なので, 自然と「テストのしやすさ (テスタビリティ)」を意識して実装することになります. そして, TDD においては一般的に, テスタビリティを意識することで, 設計が改善されるとされています. オブジェクト指向には難しい概念がたくさん登場します.

  • Singleton パターンの使いどころをまとめてみた

    GoFのデザインパターンの中でも特に知名度の高い (そして間違った使われ方の多い) Singleton パターン, 皆様は有効活用してますか? 今回は自分の考える Singleton パターンの有効な使いどころを NG コード集も添えて説明したいと思います. (※サンプルコードは JavaPHP で記載します) 概要 Singleton パターンを適用すべき条件について, 結論を簡単に書いてしまうと 状態を持たないこと ポリモーフィズムが絡む (抽象クラスまたはインタフェースを実装している) こと の 2 点に尽きます. おそらくこれらを無意識的に実践しているプログラマーも多いのではないかと思います. 状態を持たないこと 鉄則です. メンバ変数を含んだシングルトンパターンって, それ単なるグローバル変数ですから! WEB アプリケーションのフレームワークなどでこんなコードを見たことは

    Singleton パターンの使いどころをまとめてみた
  • 2.Adapter パターン 1

    2012/04/26 一部修正しました デザインパターン 2章 Adapter パターン 2.1 Adapterパターンとは 2.2 サンプルケース1(継承を利用した Adapter パターン) 2.3 サンプルケース2(委譲を利用した Adapter パターン) 2.4 Adapterパターン まとめ 2.1 Adapterパターンとは 第2章では Adapter パターンを学びます。adaptという単語は日語で「適合させる」という意味で、adapterとは「適合させるもの」という意味になります。Adapterパターンは、インタフェースに互換性の無いクラス同士を組み合わせることを目的としたパターンです。 例えば、これまで利用していたメソッドと同じ機能を、よりすぐれた形で提供するメソッドを持つクラスの存在を知ったとします。しかし、このすぐれたメソッドは、これまで利用していたメソッドとは異

  • プログラマー面接時の技術的な質問事項(アプレッソ版) : 小野和俊のブログ

    技術者・SE・プログラマ面接時の技術的な質問事項というエントリをはてブで見かけたのだが、私もjavaプログラマーの面接を割とよくやっているので、よく質問する内容をまとめてみた。 (ちなみに、基的にコーディング面接の形態を取っている) プロジェクトの性質にもよると思うが、私の場合には、情報処理技術者試験的に基礎が満遍なく抑えられているかどうかよりも、 すぐ答えが見つからないような課題に対して、きちんと自分でやり方を考え、対応することができるか 「変な」コードをコミットしたりしないか(見つけにくいバグを混入させるとか、汚いとか、遅いとか)といった点を重視している。 まず、何を知っているかよりも、どんなものを作れるか、どんなことができるか、という質問。 ここで強烈な回答が来る人は、たいていここより下の質問は「あー、はいはい」という感じでサラッと答えてくることが多い。 これまでに携わってきた開発

    プログラマー面接時の技術的な質問事項(アプレッソ版) : 小野和俊のブログ
  • デザインパターンを読み解く

    ポリモーフィズム(サブクラスによる切り替え、抽象化) ここに分類されるのは、オブジェクト指向の第3原則、ポリモーフィズムを使用したパターンです。ポリモーフィズムを使用すると、動的に使用するクラスを切り替えることができます。<参照> 他に分類されているものでも、ポリモーフィズムが重要な位置を占めているものもありますが、ここではそれしか使われていないものを扱います。 ただデザインパターン全体を通して強調されているのは、インターフェースでプログラミングするということです。実装への依存をなくし、そうすることによって設計の骨組みを明らかにするのです。 Template 次のようなメソッドがあった場合に、処理Bのところを条件によって変えたい場合があるとします。 class Hogehoge { void doit() { ... 処理A ... ... 処理B ... ... 処理C ... } }

  • 17.Observer パターン

    2012/04/26 一部修正しました デザインパターン 17章 Observerパターン 17.1 Observerパターンとは 17.2 サンプルケース 17.3 Observerパターンまとめ 17.1 Observer パターンとは 第17章では Observer パターンを学びます。Observer とは、英語で「観察者」を意味する単語です。Observer パターンとは、状態の変化を観察することを目的としたものですが、どちらかというと「観察」よりも「通知」に重点の置かれたものになっています。 あるインスタンスの状態が変化した際に、そのインスタンス自身が、「観察者」に状態の変化を「通知」する仕組みです。例えば、飛行機の搭乗券について考えて見ましょう。飛行機の搭乗券を購入した人がキャンセルする必要に駆られた場合、航空会社に連絡してキャンセルする旨を伝えます。各搭乗者を管理しているの

  • 再考: GoF デザインパターン - Qiita

    投稿は私の主観によって書かれています。コメントは大歓迎です。もし長くなるようでしたら別途記事に投稿し、リンクを張っていただけると嬉しいです。 概要 GoFのデザインパターンは適当すぎるから、いい加減、修正されるべき。 参考までに各パターンに対するコメントを書く。 GoFのデザインパターン GoFのデザインパターンは適当であり、教科書通りに学ぶべきものではないように思う。 以下がGoFのデザインパターンの良くない原因だろう。 が出版されたのは1994年であり、Java(1995)が出てくるよりも前だった オブジェクト指向が未成熟な時代にカタログ化された 現代のプログラミングと合致しないものが多い 「オブジェクト指向における~」と断っている以上、OOPに絡める必要があった パターンのいくつかに「多態性を用いると便利」という蛇足がついている 挙げたパターンに根拠がない 「とりあえず、23個ほ

    再考: GoF デザインパターン - Qiita
  • Javaプログラマから見たJavaScriptデザインパターン(導入編) - Qiita

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

    Javaプログラマから見たJavaScriptデザインパターン(導入編) - Qiita
  • 続・リトライと冪等性のデザインパターン - リトライはいつ成功するか - Blog by Sadayuki Furuhashi

    三度の飯よりエラー処理。古橋です。 大変好評をいただいた序章リトライと冪等性のデザインパターンの続編です。 前回はほぼ前置きでしたが、今回は冪等でない操作を冪等にする具体的なテクニックもまとめていきます。 パターン2:エラーを区別してDELETEを冪等にする リソースに常に一意なIDが振られていれば、Deleteを冪等にするのは難しくない。そもそも同じリソースを2度削除することはできない。 一つ注意するべきなのは、削除されたリソースのIDが再利用されるケースでは、Deleteの冪等性は保証されない。例えば、kill -KILL <pid> コマンドはDelete系のAPIと考えられるが、pidは再利用されるので、何度も繰り返すと意図しないプロセスを殺してしまう可能性がある。 一般にIDの生成は非常に難しい問題だが、Deleteに関してのみ言えば再利用されなければいいので、単調増加する整数(

    続・リトライと冪等性のデザインパターン - リトライはいつ成功するか - Blog by Sadayuki Furuhashi
    masudaK
    masudaK 2014/06/12
    「三度の飯よりエラー処理」
  • リトライと冪等性のデザインパターン - Blog by Sadayuki Furuhashi

    リトライを肴に一晩酒が飲める古橋です。 大規模なデータに触れることが日常茶飯事になっている今日この頃。この分野のおもしろいところは、いつまで経っても終わらないプログラムを簡単に作れてしまうことかもしれません。エラー処理、リトライそして冪等性*1の3つを抑えていないプログラムは、小規模なデータなら問題ないが、データ量が多くなると使い物にならなくなる可能性が大です。 大規模データをバッチ処理するケース以外でも、リトライは一般にプログラムの信頼性に関わる重要な問題です。 そんなわけで、リトライに関わるいくつかのデザインパターンを、連載でまとめておこうと思います*2。 では、第1回は背景から: なぜリトライが必要なのか プログラムは色々な理由で失敗する。例えば、 A) 通信先のプログラムが高負荷すぎて応答できなかった B) メモリを消費しすぎてメモリ確保に失敗した。またはOOM KIllerに殺さ

    リトライと冪等性のデザインパターン - Blog by Sadayuki Furuhashi
    masudaK
    masudaK 2014/06/10
    続きも読みたい
  • デザインパターンとともに学ぶオブジェクト指向のこころ を読んだ - takatoshiono's blog

    読んだ理由 最近、ソフトウェアの設計力が不足していると感じる。もっといい感じにクラスを設計して、オブジェクト指向ぽいプログラムを書けるようになりたい。しかもスピード感を持ってやりたい。ということで、いまさらだけど、オブジェクト指向についてもう一度学んでみようと思った。を読めばいいという訳じゃないけど、とりあえずもっと知識を増やしたい。渋谷の東急百貨店 7F の丸善&ジュンク堂書店に行って、 オブジェクトデザイン (Object Oriented SELECTION) エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践) オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES) の3冊で悩んだ結果、これを買った。決める要因となったのは、 ついでにデザインパターンについて理解を深められたらいいなと思った これまで

    デザインパターンとともに学ぶオブジェクト指向のこころ を読んだ - takatoshiono's blog
  • もう一つのSingleton - 職業プログラマの休日出勤

    Singletonと言えば、オブジェクト指向言語におけるデザインパターンの一つのことです。 とあるクラスのインスタンスが高々1個までしか存在しないことを保証するクラスのことを指します。 Singleton パターン - Wikipedia Singletonには重大な欠点があります。このWikipediaの記事でも指摘されているように、グローバル変数として利用することができてしまい、コードの保守性に問題を来すことがあるのです。 この問題点および解決策などについて詳しくは、2013年6月のCocoa勉強会関西における @kaniza さんの発表スライド ワタシはSingletonがキライだ を参考にされると良いでしょう。 しかし、上記のスライドの中で指摘されている通り、Singletonには誘惑があるのも事実。基的に筆者はこの誘惑に負ける程度の人間です(小規模なソフトウェアを作る時は特に)

    もう一つのSingleton - 職業プログラマの休日出勤
  • ハタさんのブログ : PHP開発者のためのデザインパターン。Controller

    はてブコメントにて、「シリーズ化して欲しい」とあったので、もう少し書いてみます。 今回紹介するパターンは、Controllerパターン。 たぶん、デザパタ(GoFとかのヤツ)ではControllerパターンなんてものは存在しないのですが、よく見掛けるパターンなので紹介します。 よくあるControllerパターンは、FrontControllerパターンを使ったデータ遷移パターンですが、今回僕が紹介するパターンはCommandController(これもGoFとかのパターンにたぶん無いので勝手に命名)です。 何か実行したいCommandについて、Controllerが適切に実装を振り分けその後のActionを実行するためのパターンです。 よくある実装 例えば、以下にCommandインタフェースを実装した複数のクラスがあり、そのCommandによって、実行するActionを振り分けるCo

  • PHPによるデザインパターン入門 - Do You PHP?

    PHPによるデザインパターン入門 秀和システムから発売となった「PHPによるデザインパターン入門」(ISBN4-7980-1516-4・ 2006/11/23発売)を執筆しました(共著です)。 「PHPを使ってGoFパターンを見ていこう」的な書籍になっています。GoFパターンについては、それぞれパターンの説明とサンプルコードという構成です。サンプルコードは、CentOS4.4/Windows XP(SP2)+PHP5.1.x/5.2.0で動作確認しています。 目次は以下の通りです。 1章 デザインパターンの世界へようこそ デザインパターンって何? デザインパターンとは? オブジェクト指向 GoFパターン デザインパターンのメリット・デメリット デザインパターンを使うメリット デザインパターンを使うデメリット PHPとオブジェクト指向 PHPとは? PHP5でのオブジェクト指向開発 2章

    PHPによるデザインパターン入門 - Do You PHP?
  • 1