デザイン・パターンとは、与えられたプログラミング・コンテキストの中で発生する問題に対する、再利用可能な解決策のことである。

最も重要なデザイン・パターンには、以下のようなものがある：

ファクトリーメソッド
通常の工場は商品を生産するが、ソフトウェア工場はオブジェクトを生産する。それだけでなく、作成するオブジェクトの正確なクラスを指定することなく、オブジェクトを作成します。これを実現するために、オブジェクトはコンストラクタを呼び出す代わりにファクトリーメソッドを呼び出すことで生成される。

シングルトン
シングルトンパターンは、クラスの作成を単一のオブジェクトに限定するために使われます。これは、システム全体のアクションを調整するために1つのオブジェクト（そして1つだけ）が必要な場合に有益です。キャッシュ、スレッドグループ、レジストリなど、クラスの単一のインスタンスが存在すべき例がいくつかあります。

オブザーバー
このパターンはオブジェクト間の1対多の依存関係であり、あるオブジェクトが状態を変更すると、その依存関係すべてに通知される。通常、これはオブジェクトのメソッドの1つを呼び出すことで行われる。
簡単にするために、Twitterで誰かをフォローしたときのことを考えてみよう。基本的に、あなたはTwitterに、フォローした人（被験者）からのツイートの更新をあなた（オブザーバー）に送るように依頼している。このパターンは2つのアクターで構成されます。更新に興味を持つオブザーバーと、更新を生成するサブジェクトです。

戦略
Strategyパターンは、関連するアルゴリズムを抽象化の下にグループ化することで、クライアントを変更することなく、あるアルゴリズムやポリシーを別のものに変更することを可能にします。単一のアルゴリズムを直接実装する代わりに、コードは実行時にアルゴリズム・グループのどれを実行するかを指定する命令を受け取る。

アダプター
あるクラスのインターフェイスを別のクラスに変換することで、互換性のないクラス同士を連携させることができる。共通の言語を話さない2人の国家元首が会うとき、通常は通訳が2人の間に座って会話を翻訳し、コミュニケーションを可能にします。
2つのアプリケーションがあり、一方はXMLとして出力し、もう一方はJSONの入力を必要とする場合、両者をスムーズに動作させるために両者の間にアダプターが必要になります。

ビルダー
その名が示すように、ビルダー・パターンはオブジェクトを構築するために使われます。作成するオブジェクトが複雑で、複数のサブオブジェクトから構成されていたり、入念な構築プロセスが必要だったりすることがあります。複雑な型を作成する作業は、構築パターンを使うことで簡略化できます。通常、ビルダーが構築するのは複合オブジェクトや集約オブジェクトです。
重要な考慮点： Builderパターンは「抽象ファクトリー」パターンと似ているように見えるかもしれませんが、1つの違いは、抽象ファクトリーパターンがオブジェクトを一度にすべて返すのに対して、Builderパターンはオブジェクトを一度に1ステップずつ作成することです。

ステート（State
Stateパターンは、マシンが取り得るさまざまな状態をカプセル化し、内部状態が変化したときにオブジェクトがその振る舞いを変更できるようにします。パターン・ランゲージで呼ばれるように、マシンまたはコンテキストは、それをさまざまな状態に動かすアクションを持つことができる。このパターンを使わないと、コードは柔軟性を失い、if-elseの条件分岐だらけになる。
Un patrón de diseño es una solución reutilizable para un problema que ocurre dentro de un contexto de programación dado.

Algunos de los patrones de diseño más importantes son los siguientes:

Factory method
Una fábrica normal produce bienes; una fábrica de software produce objetos. Y no solo eso, lo hace sin especificar la clase exacta del objeto que se creará. Para lograr esto, los objetos se crean llamando a un método de fábrica en lugar de llamar a un constructor.

Singleton
El patrón singleton se utiliza para limitar la creación de una clase a un solo objeto. Esto es beneficioso cuando se necesita un objeto (y solo uno) para coordinar acciones en todo el sistema. Hay varios ejemplos en dónde debería existir una única instancia de una clase, incluidos cachés, grupos de subprocesos y registros.

Observer
Este patrón es una dependencia de uno a muchos entre objetos, de modo que cuando un objeto cambia de estado, se notifica a todos sus dependientes. Normalmente, esto se hace llamando a uno de sus métodos.
En aras de la simplicidad, piense en lo que sucede cuando sigue a alguien en Twitter. Básicamente, le estás pidiendo a Twitter que te envíe (el observador) actualizaciones de tweets de la persona (el sujeto) que seguiste. El patrón consta de dos actores, el observador que está interesado en las actualizaciones y el sujeto que genera las actualizaciones.

Strategy
El patrón de estrategia permite agrupar algoritmos relacionados bajo una abstracción, lo que permite cambiar un algoritmo o política por otro sin modificar el cliente. En lugar de implementar directamente un solo algoritmo, el código recibe instrucciones en tiempo de ejecución que especifican cuál del grupo de algoritmos ejecutar.

Adapter
Esto permite que las clases incompatibles trabajen juntas al convertir la interfaz de una clase en otra. Piense en ello como una especie de traductor: cuando dos jefes de estado que no hablan un idioma común se encuentran, generalmente un intérprete se sienta entre los dos y traduce la conversación, lo que permite la comunicación.
Si tienes dos aplicaciones, una de las cuales arroja la salida como XML y la otra requiere una entrada JSON, entonces necesitará un adaptador entre las dos para que funcionen sin problemas.

Builder
Como su nombre lo indica, se utiliza un patrón de construcción para construir objetos. A veces, los objetos que creamos pueden ser complejos, estar formados por varios subobjetos o requerir un elaborado proceso de construcción. El ejercicio de crear tipos complejos se puede simplificar utilizando el patrón de construcción. Un objeto compuesto o agregado es lo que generalmente construye un constructor.
Consideración clave: el patrón Builder puede parecer similar al patrón de "fábrica abstracta", pero una diferencia es que el patrón Builder crea un objeto paso a paso, mientras que el patrón de fábrica abstracto devuelve el objeto de una vez.

State
El patrón State encapsula los diversos estados en los que puede estar una máquina y permite que un objeto altere su comportamiento cuando cambia su estado interno. La máquina o el contexto, como se le llama en lenguaje de patrones, puede tener acciones que lo impulsen a diferentes estados. Sin el uso del patrón, el código se vuelve inflexible y está plagado de condicionales if-else.