Coder Social home page Coder Social logo

study_of_design_pattern's Introduction

study_of_design_pattern

デザインパターンとは、 デザインパターンとは、ソフトウェア開発におけるデザインパターン(型紙(かたがみ)または設計パターン、英: design pattern)とは、過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したものである。

コンピュータのプログラミングで、素人と達人の間では驚くほどの生産性の差があり、その差はかなりの部分が経験の違いからきている。達人は、さまざまな難局を、何度も何度も耐え忍んで乗り切ってきている。そのような達人たちが同じ問題に取り組んだ場合、典型的にはみな同じパターンの解決策に辿り着く。これがデザインパターンである (GoF)。 それぞれのパターンは、プログラマの間で何度も繰り返し考え出されてきた。したがって、それは最善の解決策ではないかもしれないが、その種の問題に対するトレードオフを考慮した、典型的な解決策ではある。さらに、コストがかかるかもしれない問題解決を実際に行う前の先行調査として、大変役に立つ。パターンに名前が付いていることが重要である。なぜなら、名前が付いていることで問題や解決策を記述したり、会話の中で取り上げたりすることができるようになるからである。 (以上、ウィキペディア(Wikipedia)より引用)

オブジェクトの生成に関するデザインパターンの一覧

パターン名 概要
Abstract Factory 関連する一連のインスタンスを状況に応じて、適切に生成する方法を提供する。
Builder 複合化されたインスタンスの生成過程を隠蔽する。
Factory Method 実際に生成されるインスタンスに依存しない、インスタンスの生成方法を提供する。
Prototype 同様のインスタンスを生成するために、原型のインスタンスを複製する。
Singleton あるクラスについて、インスタンスが単一であることを保証する。

構造に関するパターンの一覧

パターン名 概要
Adapter 元々関連性のない2つのクラスを接続するクラスを作る。
Bridge クラスなどの実装と、呼出し側の間の橋渡しをするクラスを用意し、実装を隠蔽する。
Composite 再帰的な構造を表現する。
Decorator あるインスタンスに対し、動的に付加機能を追加する。Filterとも呼ばれる。
Facade 複数のサブシステムの窓口となる共通のインタフェースを提供する。
Flyweight 多数のインスタンスを共有し、インスタンスの構築のための負荷を減らす。
Proxy 共通のインタフェースを持つインスタンスを内包し、利用者からのアクセスを代理する。Wrapperとも呼ばれる。

振る舞いに関するパターン

パターン名 概要
Chain of Responsibility イベントの送受信を行う複数のオブジェクトを鎖状につなぎ、それらの間をイベントが渡されてゆくようにする。
Command 複数の異なる操作について、それぞれに対応するオブジェクトを用意し、オブジェクトを切り替えることで、操作の切替えを実現する。
Interpreter 構文解析のために、文法規則を反映するクラス構造を作る。
Iterator 複数の要素を内包するオブジェクトのすべての要素に対して、順番にアクセスする方法を提供する。反復子。
Mediator オブジェクト間の相互作用を仲介するオブジェクトを定義し、オブジェクト間の結合度を低くする。
Memento データ構造に対する一連の操作のそれぞれを記録しておき、以前の状態の復帰または操作の再現が行えるようにする。
Observer インスタンスの変化を他のインスタンスから監視できるようにする。Listenerとも呼ばれる。
State オブジェクトの状態を変化させることで、処理内容を変えられるようにする。
Strategy データ構造に対して適用する一連のアルゴリズムをカプセル化し、アルゴリズムの切替えを容易にする。
Template Method あるアルゴリズムの途中経過で必要な処理を抽象メソッドに委ね、その実装を変えることで処理が変えられるようにする。
Visitor データ構造を保持するクラスと、それに対して処理を行うクラスを分離する。

study_of_design_pattern's People

Contributors

ttsubo avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.