古い投稿 を見つけましたが、これはWrapper Classesで使用されているデザインパターンについての私の理解を明確にしていません。
Wrapperクラスは実際にデザインパターンを使用していますか?
パターンを使用している場合、次のうちどのパターンなのか:Decorator Pattern
、Facade Pattern
またはAdapter Pattern
?
ラッピングプリミティブを参照する場合
ラッパークラスは、プリミティブ型をオブジェクトとして使用する方法を提供します
Adapter パターンは最も正確な意味です:
デコレータを使用すると、実行時にインターフェイスの動作を追加または変更できます。または、ラッパーが特定のインターフェイスを尊重し、多態的な動作をサポートする必要がある場合、アダプターを使用できます。基礎となるオブジェクトが望ましい
Wrapperクラスの機能を使用して、プリミティブをオブジェクトとして使用します。つまり、多態的な動作にサポートを追加します。
いずれにせよ、3つの設計パターンはすべてラッパーを記述しています。
さて、答えは、多くの理由でオブジェクトをラップできることを示しているようです。そのため、多くのパターンがあります。そこで、より一般的な答えをしようと思います。
ラッパーは基本的に、メインオブジェクトを変更せずに何かを提供することを唯一の目的とするオブジェクトです(機能の追加、APIの単純化、シリアル化、...他の回答を参照)。例については、他の回答をご覧ください。
ラッパーを使用する別の方法としては、継承がありますが、すべての場合に当てはまりません。
そのため、ラッパーは単なる技術的な方法です。それ自体はパターンではありません。
あなたが言及したデザインパターンには従いません。
Adapterは、クラスのインターフェースを別のインターフェースに変換します。プリミティブはインターフェースを実装しません。
Decoratorは、同じインターフェースを実装する別のインターフェースにラップすることにより、あるインターフェースを実装するクラスの動作を追加します。プリミティブはインターフェースを実装しません。
facadeの目的は、ラップするオブジェクトの複雑な動作をマスクすることです。プログラミング言語には、プリミティブほど複雑なものはありません。手がかりは名前にあります。どちらかといえば、ラッパークラスはこれの反対です。
私のここで一番上にあるのは、利用するいくつかのデザインパターンです。
Integer
、Long
およびByte
は、 フライウェイト オブジェクトの オブジェクトプール を使用して、 不要なインスタンスの作成 。
Boolean
somewhatは multiton (コンストラクタが非推奨であるという点)になろうとしますが、実際にはそうではありません。
ラッパークラスはcompositionを使用します。人気の格言と同じ構成、「継承よりも構成を優先する。」構成は設計パターンではありません。ただし、ほとんどのOO設計パターンは実装の一部として構成を使用します。これが多くの人々が異なる設計パターンを区別するのに苦労している理由の1つです。ある程度。
構成関係には2つの基本的な部分があります。composerと構成。これは一般に、部分/全体の関係と考えることができます。1対1または1対1の場合があります。 -many。wrapperは作曲家、つまり全体であり、1つまたは複数の構成された部分をラップできます。
多くの異なる設計パターンは、さまざまな目的で一般的な構成関係を利用します。これらの異なるパターンの多くは、まとめて「ラッパー」と呼ばれます。 GoFの本は、少なくとも2つのそのようなパターンを呼び出しています。
ADAPTER Also Known As Wrapper
139ページDECORATOR Also Known As Wrapper
175ページ
要約すると、Wrapperは単一のデザインパターンではありません。むしろ、それはデザインパターンのカテゴリです。ちなみに、用語Factoryでも同じダイナミクスが見られます。 Factoryという名前の単一のデザインパターンはありません。むしろ、それはデザインパターンのカテゴリです。