ソフトウェア工学において、ソフトウェア設計パターンまたはデザインパターンは、ソフトウェア設計の多くのコンテキストで一般的に発生する問題に対する一般的で再利用可能なソリューションです。[1]デザインパターンは、ソースコードに直接移植される厳格な構造ではありません。むしろ、さまざまな状況で展開できる特定のタイプの問題を解決するための説明またはテンプレートです。[2]デザインパターンは、プログラマがソフトウェアアプリケーションまたはシステムを設計するときに一般的な問題を解決するために使用できる 形式化されたベストプラクティスと見なすことができます。
オブジェクト指向設計パターンは、通常、クラスまたはオブジェクト間の関係と相互作用を示しますが、関係する最終的なアプリケーション クラスまたはオブジェクトは指定しません。 [引用が必要]可変状態を暗示するパターンは、関数型プログラミング言語には適さない場合があります。一部のパターンは、解決しようとしている問題を解決するためのサポートが組み込まれている言語では不要になる可能性があり、オブジェクト指向パターンは必ずしも非オブジェクト指向言語に適しているわけではありません。[引用が必要]
デザインパターンは、プログラミングパラダイムのレベルと具体的なアルゴリズムの中間に位置する、コンピュータプログラミングに対する構造化されたアプローチと見なすことができます。[要出典]
歴史
パターンは、1977 年にChristopher AlexanderがA Pattern Languageで建築概念として提唱した(彼の論文「The Pattern of Streets」、JOURNAL OF THE AIP、1966 年 9 月、第 32 巻、第 5 号、273 ~ 278 ページを参照)。1987 年、Kent BeckとWard Cunningham は、パターンをプログラミング (具体的にはパターン言語)に適用するアイデアの実験を開始し、その年のOOPSLAカンファレンスでその結果を発表しました。[3] [4]その後数年間、Beck、Cunningham らがこの研究を続行しました。
デザイン パターンは、1994 年にいわゆる「Gang of Four」(Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides) によって出版された『Design Patterns: Elements of Reusable Object-Oriented Software』という書籍の後、コンピューターサイエンスで人気を博しました。この書籍は、しばしば「GoF」と略されます。同じ年に、最初のPattern Languages of Programming Conference が開催され、翌年には、デザイン パターンのドキュメント化のためにPortland Pattern Repositoryが設立されました。この用語の範囲は、依然として議論の的となっています。デザイン パターンのジャンルで注目すべき書籍には、 次のものがあります。
- ガンマ、エリック、ヘルム、リチャード、ジョンソン、ラルフ、ブリシデス、ジョン( 1994)。デザインパターン: 再利用可能なオブジェクト指向ソフトウェアの要素。Addison - Wesley。ISBN 978-0-201-63361-0。
- Brinch Hansen, Per (1995)。計算科学の研究: 並列プログラミングパラダイム。Prentice Hall。ISBN 978-0-13-439324-7。
- ブッシュマン、フランク。ムニエ、レジーヌ。ローナート、ハンス。サマーラッド、ピーター (1996)。パターン指向ソフトウェア アーキテクチャ、第 1 巻: パターンのシステム。ジョン・ワイリー&サンズ。ISBN 978-0-471-95869-7。
- Beck, Kent (1997)。Smalltalkベストプラクティスパターン。Prentice Hall。ISBN 978-0134769042。
- Schmidt, Douglas C. ; Stal, Michael; Rohnert, Hans; Buschmann, Frank (2000)。パターン指向ソフトウェアアーキテクチャ、第 2 巻: 並行オブジェクトとネットワークオブジェクトのパターン。John Wiley & Sons。ISBN 978-0-471-60695-6。
- Fowler, Martin (2002)。『エンタープライズ アプリケーション アーキテクチャのパターン』。Addison - Wesley。ISBN 978-0-321-12742-6。
- Hohpe, Gregor; Woolf, Bobby (2003)。 『エンタープライズ統合パターン: メッセージング ソリューションの設計、構築、展開』。Addison - Wesley。ISBN 978-0-321-20068-6。
- フリーマン、エリック T.、ロブソン、エリザベス、ベイツ、キャシー・シエラ(2004)。『Head First Design Patterns 』。オライリー メディア。ISBN 978-0-596-00712-6。
- ラーマン、クレイグ(2004)。UMLとパターンの適用 (第 3 版、第 1 版 1995)。ピアソン。ISBN 978-0131489066。
デザインパターンは長い間実用化されてきましたが、デザインパターンの概念の形式化は数年間停滞していました。[5]
練習する
デザインパターンは、実証済みの開発パラダイムを提供することで、開発プロセスをスピードアップすることができます。[6]効果的なソフトウェア設計には、実装の後半まで明らかにならない可能性のある問題を考慮する必要があります。書きたてのコードには、検出に時間のかかる隠れた微妙な問題が潜んでいることがよくあります。これらの問題は、後々大きな問題を引き起こすことがあります。デザインパターンを再利用すると、このような問題を防ぐことができ、[7]パターンに精通している人にとってはコードの読みやすさが向上します。
ソフトウェア設計手法は、広範囲の問題に適用するのが困難です。[要出典]設計パターンは、特定の問題に結び付けられた詳細を必要としない形式で 文書化された一般的なソリューションを提供します。
1996 年、Christopher Alexander は 1996 OOPSLA コンベンションに基調講演を行うよう招待されました。ここで彼は、アーキテクチャにおけるパターンに関する研究がどのように発展してきたかを振り返り、ソフトウェア デザイン コミュニティがアーキテクチャでパターンを拡張して、コンピューター コードに似た生成スキームを使用する生きた構造を作成するのにどのように役立つかについての希望を述べました。
モチーフ
パターンは、設計モチーフ、つまりプロトタイプのマイクロアーキテクチャを、プログラム構成要素 (クラス、メソッドなど) とその関係のセットとして記述します。開発者は、パターンで記述された問題を解決するために、モチーフをコードベースに適合させます。結果として得られるコードは、選択したモチーフに似た構造と構成を持ちます。
ドメイン固有のパターン
既存のデザインパターンやドメイン固有のデザインパターンの使用など、特定のドメインでデザインパターンを体系化する取り組みも行われてきました。例としては、ユーザーインターフェイスデザインパターン、[8] 情報視覚化、[9]セキュアデザイン、[10]「セキュアユーザビリティ」、[11] Webデザイン[12]、ビジネスモデルデザインなどがあります。[13]
毎年開催されるプログラミングパターン言語会議の議事録[14]には、ドメイン固有のパターンの例が数多く含まれています。
オブジェクト指向プログラミング
オブジェクト指向設計パターンは、通常、クラスまたはオブジェクト間の関係と相互作用を示しますが、関係する最終的なアプリケーション クラスまたはオブジェクトは指定しません。可変状態を暗示するパターンは、関数型プログラミング言語には適さない場合があります。一部のパターンは、解決しようとしている問題を解決するためのサポートが組み込まれている言語では不要になる可能性があり、オブジェクト指向パターンは必ずしも非オブジェクト指向言語に適しているわけではありません。
例
デザイン パターンは、解決する問題の種類に基づいてグループ分けできます。作成パターンはオブジェクトを作成します。構造パターンはクラスとオブジェクトを整理して、新しい機能を提供するより大きな構造を形成します。動作パターンは、オブジェクト間の通信を提供し、これらのパターンを実現します。
ドキュメント
デザインパターンのドキュメントでは、パターンが使用されるコンテキスト、そのコンテキスト内でパターンが解決しようとする力、および提案される解決策について説明します。[27]デザインパターンをドキュメント化する単一の標準形式はありません。むしろ、さまざまなパターン作成者によってさまざまな形式が使用されてきました。ただし、Martin Fowlerによると、特定のパターン形式が他の形式よりもよく知られるようになり、その結果、新しいパターン作成作業の一般的な出発点になっています。[28]よく使用されるドキュメント形式の 1 つの例は、Erich Gamma、Richard Helm、Ralph Johnson、およびJohn Vlissidesが著書Design Patternsで使用した形式です。次のセクションが含まれています。
- パターン名と分類:パターンを識別および参照するのに役立つ説明的で一意の名前。
- 意図:パターンの背後にある目標とそれを使用する理由の説明。
- 別名:パターンの別名。
- 動機 (力):問題と、このパターンを使用できるコンテキストで構成されるシナリオ。
- 適用性:このパターンが使用可能な状況、パターンのコンテキスト。
- 構造:パターンのグラフィカルな表現。クラス図や相互作用図がこの目的に使用される場合があります。
- 参加者:パターンで使用されるクラスとオブジェクト、および設計におけるそれらの役割のリスト。
- コラボレーション:パターン内で使用されるクラスとオブジェクトが相互に作用する方法の説明。
- 結果:パターンの使用によって生じる結果、副作用、トレードオフの説明。
- 実装:パターンの実装の説明。パターンのソリューション部分。
- サンプル コード:パターンをプログラミング言語でどのように使用できるかを示す図。
- 既知の使用法:パターンの実際の使用例。
- 関連パターン:パターンと何らかの関係がある他のパターン。パターンと類似のパターンの違いについての説明。
批判
デザインパターンは、特定のプログラミング言語(たとえばJavaやC++ )に機能が欠けていることの兆候かもしれないと示唆する人もいます。Peter Norvig は、デザインパターンの本(主に C++ に焦点を当てています)の 23 のパターンのうち 16 がLispまたはDylanでは(直接言語サポートによって)簡素化または削除されていることを示しています。[29]関連する観察は、Hannemann と Kiczales によってなされました。彼らは、23 のデザインパターンのいくつかをアスペクト指向プログラミング言語(AspectJ)を使用して実装し、23 のデザインパターンのうち 17 の実装からコードレベルの依存関係が削除され、アスペクト指向プログラミングによってデザインパターンの実装が簡素化できることを示しました。[30] Paul Graham のエッセイ「Revenge of the Nerds」 も参照してください。 [31]
パターンを不適切に使用すると、不必要に複雑さが増す可能性があります。[32] FizzBuzzEnterpriseEditionは、デザインパターンによってもたらされる過度の複雑さの面白い例を示しています。[33]
定義上、パターンはそれを使用する各アプリケーションに新たにプログラムされなければならない。一部の著者はこれをコンポーネントによって提供されるソフトウェアの再利用からの後退と見なしているため、研究者はパターンをコンポーネント化する作業を行ってきた。マイヤーとアーノウトは、試みたパターンの3分の2を完全にまたは部分的にコンポーネント化することができた。[34]
柔軟性を実現するために、デザイン パターンでは間接レベルが追加されることがあります。これにより、結果として得られるデザインが複雑になり、実行時のパフォーマンスが低下する可能性があります。
他のトピックとの関係
ソフトウェア設計パターンは、ソフトウェアアーキテクチャパターンやソフトウェアアーキテクチャスタイルと比較して、より細かい粒度を提供します。これは、設計パターンが個々のコンポーネントまたはサブシステム内の詳細な低レベルの設計問題を解決することに重点を置いているためです。例としては、シングルトン、ファクトリーメソッド、オブザーバーなどがあります。[35] [36] [37]
ソフトウェアアーキテクチャパターンとは、システムレベルで繰り返し発生する問題に対する再利用可能で実証済みのソリューションを指し、システムの全体的な構造、コンポーネントの相互作用、および品質特性に関連する懸念に対処します。[要出典]ソフトウェアアーキテクチャパターンは、デザインパターンよりも高い抽象レベルで動作し、より広範なシステムレベルの課題を解決します。これらのパターンは通常、システムレベルの懸念に影響しますが、アーキテクチャパターンとアーキテクチャスタイルの区別が曖昧になることがあります。例としては、サーキットブレーカーなどがあります。[35] [36] [37]
ソフトウェアアーキテクチャスタイルとは、システム全体の構成を定義する高レベルの構造組織を指し、コンポーネントの構成方法、相互作用の方法、相互作用の制約を指定します。[要出典]アーキテクチャスタイルには通常、コンポーネントとコネクタの種類の語彙、およびシステムのプロパティを解釈するためのセマンティックモデルが含まれます。これらのスタイルは、システム構成の最も粗いレベルを表します。例としては、階層化アーキテクチャ、マイクロサービス、イベント駆動型アーキテクチャなどがあります。[35] [36] [37]
参照
参考文献
- ^ Alexandrescu, Andrei (2001). Modern C++ Design: Generic Programming and Design Patterns Applied . Addison-Wesley. p. xviii. ISBN 978-0-201-70431-0。
- ^ Horner, Mark (2005). "9". Pro .NET 2.0 コードおよび設計標準 in C# . Apress. p. 171. ISBN 978-1-59059-560-2。
- ^ Smith, Reid (1987 年 10 月)。設計方法論に関するパネル。OOPSLA '87議事録の補遺。doi :10.1145/62138.62151。Wardは、いわゆる
「ウィザードの高度なレベル」でプログラミングを過度に要求することに対して警告しました。彼は、記述された「パターン言語」によって抽象化の選択と適用が大幅に改善されると指摘しました。彼は、Christopher Alexander のパターン言語の研究を適応させた新しい方法論に基づいて「設計と実装の負担を大幅に軽減する」ことを提案し、
Tektronix
で開発されたプログラミング指向のパターン言語は、ソフトウェア開発作業を大幅に支援しました。
- ^ Beck, Kent ; Cunningham, Ward (1987 年 9 月)。オブジェクト指向プログラムのためのパターン言語の使用。OOPSLA '87 ワークショップ「オブジェクト指向プログラミングの仕様と設計」。2006 年 5 月 26 日閲覧。
- ^ バローニ、アリーヌ・ルシア;ゲエヌーク、ヤン=ガエル。アルビン=アミオ、エルヴェ(2003 年 6 月)。デザイン パターンの形式化 (レポート)。 EMNテクニカルレポート。ナント: ナント国立高等技術産業技術センター。CiteSeerX 10.1.1.62.6466。S2CID 624834 – ResearchGate 経由。
- ^ Bishop, Judith. 「C# 3.0 デザイン パターン: C# 3.0 のパワーを活用して現実の問題を解決する」。O'Reilly Media の C# 書籍。2012年5 月 15 日取得
。.NET アプリケーションの開発をスピードアップしたい場合は、C# デザイン パターンが役立ちます。これは、一般的なプログラミングの問題に対処するための、エレガントで受け入れられ、実証された方法です。
- ^ Tiako, Pierre F. (2009 年 3 月 31 日)。「RTPA を使用したデザイン パターンの形式モデリングと仕様」。Tiako, Pierre F (編)。ソフトウェアアプリケーション: 概念、方法論、ツール、およびアプリケーション: 概念、方法論、ツール、およびアプリケーション。p . 636。doi :10.4018/978-1-60566-060-8。ISBN 9781605660615。
- ^ Laakso, Sari A. (2003-09-16). 「ユーザー インターフェイス デザイン パターンのコレクション」. ヘルシンキ大学、コンピュータ サイエンス学部. 2008-01-31に閲覧。
- ^ Heer, J.; Agrawala, M. (2006). 「情報視覚化のためのソフトウェア設計パターン」. IEEE Transactions on Visualization and Computer Graphics . 12 (5): 853– 60. CiteSeerX 10.1.1.121.4534 . doi :10.1109/TVCG.2006.178. PMID 17080809. S2CID 11634997.
- ^ Dougherty, Chad; Sayre, Kirk; Seacord, Robert C.; Svoboda, David; Togashi, Kazuya (2009). セキュア デザイン パターン(PDF) . Software Engineering Institute.
- ^ Garfinkel, Simson L. (2005). 安全かつ使いやすいコンピュータ システムの設計原則とパターン (博士論文).
- ^ 「Yahoo! デザインパターンライブラリ」。2008 年 2 月 29 日時点のオリジナルよりアーカイブ。2008年 1 月 31 日閲覧。
- ^ 「リーンスタートアップとしてビジネスモデルを設計するには?」 2010 年 1 月 6 日. 2010 年 1 月 6 日閲覧。
- ^ プログラミングのパターン言語、会議議事録(年次、1994年〜)[1]
- ^ abc McConnell, Steve (2004 年 6 月)。「Design in Construction」。Code Complete (第 2 版)。Microsoft Press。p . 104。ISBN 978-0-7356-1967-8表5.1
一般的なデザインパターン
- ^ ab Fowler, Martin (2002). エンタープライズ アプリケーション アーキテクチャのパターン. Addison-Wesley . ISBN 978-0-321-12742-6。
- ^ Alur, Deepak; Crupi , John; Malks, Dan (2003). コア J2EE パターン: ベスト プラクティスと設計戦略。Prentice Hall。p. 166。ISBN 978-0-13-142246-9。
- ^ Fowler, Martin (2002). エンタープライズアプリケーションアーキテクチャのパターン. Addison-Wesley . p. 344. ISBN 978-0-321-12742-6。
- ^ Bloch, Joshua (2008). 「項目 37: マーカー インターフェースを使用して型を定義する」. Effective Java (第 2 版). Addison-Wesley. p. 179. ISBN 978-0-321-35668-0。
- ^ 「Twin – 多重継承をモデル化するデザインパターン」(PDF)。
- ^ Schmidt, Douglas C.; Stal, Michael; Rohnert, Hans; Buschmann, Frank (2000).パターン指向ソフトウェアアーキテクチャ、第2巻:並行オブジェクトとネットワークオブジェクトのパターン。John Wiley & Sons。ISBN 978-0-471-60695-6。
- ^ バインディングプロパティ
- ^ Nagel, Christian; Evjen, Bill; Glynn, Jay; Watson, Karli; Skinner, Morgan (2008). 「イベントベースの非同期パターン」。Professional C # 2008。Wiley。pp. 570– 571。ISBN 978-0-470-19137-8。
- ^ ロックパターン
- ^ Francalanza, Adrian; Tabone, Gerard (2023年10月). 「ElixirST: Elixirモジュール用のセッションベースの型システム」. Journal of Logical and Algebraic Methods in Programming . 135 . doi :10.1016/j.jlamp.2023.100891. S2CID 251442539.
- ^ Schmidt, Douglas C.; Vinoski, Steve (1996 年 7 月~8 月)。「オブジェクト相互接続: マルチスレッド CORBA サーバー向けの代替プログラミング手法の比較 (コラム 7)」(PDF)。SIGS C++ レポート。S2CID 2654843 。
- ^ Gabriel, Dick . 「パターン定義」。2007 年 2 月 9 日時点のオリジナルよりアーカイブ。2007年 3 月 6 日閲覧。
- ^ Fowler, Martin (2006-08-01). 「Writing Software Patterns」 . 2007-03-06閲覧。
- ^ Norvig, Peter (1998). 動的言語におけるデザインパターン。
- ^ Hannemann, Jan; Kiczales, Gregor (2002). 「Java と AspectJ でのデザイン パターンの実装」。第 17 回 ACM SIGPLAN 会議の議事録 - オブジェクト指向プログラミング、システム、言語、およびアプリケーション - OOPSLA '02。OOPSLA '02。p. 161。doi : 10.1145/ 582419.582436。ISBN 1581134711。
- ^ グレアム、ポール(2002). 「Revenge of the Nerds」2012年8月11日閲覧。
- ^ McConnell, Steve (2004). Code Complete: ソフトウェア構築の実践ハンドブック、第 2 版。Pearson Education。p. 105。ISBN 9780735619678。
- ^ クラグベク、ミカエル。 「FizzBuzzEnterpriseEdition」。2024 年 11 月 19 日に取得。
- ^ Meyer, Bertrand ; Arnout, Karine (2006 年 7 月). 「コンポーネント化: ビジターの例」(PDF) . IEEE Computer . 39 (7): 23– 30. CiteSeerX 10.1.1.62.6082 . doi :10.1109/MC.2006.227. S2CID 15328522.
- ^ abc ソフトウェアアーキテクチャの基礎:エンジニアリングアプローチ。オライリーメディア。2020年。ISBN 978-1492043454。
- ^ abcデザインパターン :再利用可能なオブジェクト指向ソフトウェアの要素。ISBN 978-0201633610。
- ^ abc エンタープライズアプリケーションアーキテクチャのパターン。ISBN 978-0321127426。
さらに読む
- アレクサンダー、クリストファー、サラ・イシカワ、シルバースタイン、マレー、マックス・ジェイコブソン、イングリッド・フィクスダール・キング、シュロモ・エンジェル(1977年)。『パターン言語:町、建物、建設』ニューヨーク:オックスフォード大学出版局。ISBN 978-0-19-501919-3。
- Alur, Deepak、Crupi, John、Malks, Dan (2003 年 5 月)。コアJ2EE パターン: ベスト プラクティスと設計戦略(第 2 版) 。Prentice Hall。ISBN 978-0-13-142246-9。
- Beck, Kent (2007 年 10月)。実装パターン。Addison - Wesley。ISBN 978-0-321-41309-3。
- Beck, Kent ; Crocker, R.; Meszaros, G.; Coplien, JO ; Dominick, L.; Paulisch, F.; Vlissides, J. (1996 年 3 月)。第 18 回国際ソフトウェア エンジニアリング会議の議事録。pp. 25– 30。
- Borchers, Jan (2001).インタラクションデザインへのパターンアプローチ. John Wiley & Sons . ISBN 978-0-471-49828-5。
- Coplien, James O. ; Schmidt, Douglas C. (1995).プログラム設計のパターン言語. Addison-Wesley . ISBN 978-0-201-60734-5。
- Coplien, James O. ; Vlissides, John M. ; Kerth, Norman L. (1996).プログラム設計のパターン言語 2 . Addison-Wesley . ISBN 978-0-201-89527-8。
- エロランタ、ヴェリ・ペッカ。コスキネン、ヨハネス。レッペネン、マルコ。レイヨネン、ヴィル (2014)。分散制御システムの設計: パターン言語アプローチ。ワイリー。ISBN 978-1118694152。
- ファウラー、マーティン(1997)。分析パターン: 再利用可能なオブジェクトモデル。Addison - Wesley。ISBN 978-0-201-89542-1。
- Fowler, Martin (2003)。『エンタープライズ アプリケーション アーキテクチャのパターン』。Addison - Wesley。ISBN 978-0-321-12742-6。
- フリーマン、エリック、フリーマン、エリザベス、シエラ、キャシー、ベイツ、バート (2004) 。Head First Design Patterns。O'Reilly Media。ISBN 978-0-596-00712-6。
- Hohmann, Luke; Fowler, Martin ; Kawasaki, Guy (2003). Beyond Software Architecture . Addison-Wesley . ISBN 978-0-201-77594-5。
- リチャード・ガブリエル(1996)。『ソフトウェアのパターン: ソフトウェアコミュニティの物語』(PDF)。オックスフォード大学出版局。p. 235。ISBN 978-0-19-512123-02003年8月1日時点のオリジナル(PDF)よりアーカイブ。
- ガンマ、エリック、ヘルム、リチャード、ジョンソン、ラルフ、ブリシデス、ジョン( 1995)。デザインパターン: 再利用可能なオブジェクト指向ソフトウェアの要素。Addison - Wesley。ISBN 978-0-201-63361-0。
- Hohpe, Gregor; Woolf, Bobby (2003)。 『エンタープライズ統合パターン: メッセージング ソリューションの設計、構築、展開』。Addison - Wesley。ISBN 978-0-321-20068-6。
- ホルブ、アレン (2004)。パターンのホルブ。を押します。ISBN 978-1-59059-388-2。
- Kircher, Michael; Völter, Markus; Zdun, Uwe (2005)。 『Remoting Patterns: Foundations of Enterprise , Internet and Realtime Distributed Object Middleware』。John Wiley & Sons。ISBN 978-0-470-85662-8。
- ラーマン、クレイグ(2005)。UMLとパターンの適用。プレンティス ホール。ISBN 978-0-13-148906-6。
- Liskov, Barbara ; Guttag, John (2000)。 『Java によるプログラム開発:抽象化、仕様、オブジェクト指向設計』Addison- Wesley。ISBN 978-0-201-65768-5。
- マノレスク、ドラゴス、ヴォルター、マーカス、ノーブル、ジェームズ (2006)。プログラム設計のパターン言語 5。Addison -Wesley。ISBN 978-0-321-32194-7。
- Marinescu, Floyd (2002)。EJB デザイン パターン: 高度なパターン、プロセス、イディオム。John Wiley & Sons。ISBN 978-0-471-20831-0。
- Martin, Robert Cecil ; Riehle, Dirk; Buschmann, Frank (1997).プログラム設計のパターン言語 3 . Addison-Wesley . ISBN 978-0-201-31011-5。
- Mattson, Timothy G.; Sanders, Beverly A.; Massingill, Berna L. (2005).並列プログラミングのパターン. Addison-Wesley. ISBN 978-0-321-22811-6。
- Shalloway, Alan; Trott, James R. (2001)。『デザインパターン解説 第 2 版: オブジェクト指向設計の新たな視点』Addison- Wesley。ISBN 978-0-321-24714-8。
- Vlissides, John M. (1998).パターンハッチング: デザインパターンの応用. Addison-Wesley . ISBN 978-0-201-43293-0。
- ウィアー、チャールズ、ノーブル、ジェームズ (2000)。『Small Memory Software: Patterns for systems with limited memory』Addison-Wesley . ISBN 978-0-201-59607-62007年6月17日時点のオリジナルよりアーカイブ。
