Help us understand the problem. What is going on with this article?

デザインパターン - Adapter

More than 3 years have passed since last update.

はじめに

増補改訂版Java言語で学ぶデザインパターン入門実践 Python 3に関する備忘録

Adapterパターンとは

増補改訂版Java言語で学ぶデザインパターン入門

一皮かぶせて再利用

「すでに提供されているもの」と「必要なもの」の間の「ずれ」を埋める

実践 Python3

構造に関するデザインパターン

あるクラスが、互換性のないインターフェースを持つ別のクラスを利用したい場合、そのどちらのクラスも変更することなしに利用する

Adapterパターンの構成要素

役名 概要
 Target  いま必要となっているメソッドを定義しているもの
 Client  Targetが定義したメソッドを使うクラス
 Adaptee  すでに用意されているメソッドを保持しているクラス
 Adapter  Adapteeのメソッドを利用して、Tagetが要求しているメソッドに変換するクラス

Adapterパターンのクラス図

Adapterパターンには以下の2通りが存在する。

  1. クラスによるAdapterパターン:「継承」を利用

継承を利用したAdapterパターンのクラス図

  1. インスタンスによるAdapterパターン:「委譲」を利用

委譲を利用したAdapterパターンのクラス図
※ 上図において、extendsはimplementsでもOK

まとめ

  • インターフェースが異なる2つの間に入って、そのずれを埋める(組み合わせる)ことができるのがAdapterパターン
  • 既存で用意されているクラスを包み込んでいる様子から、Wrapperパターンと呼ばれることも。  
  • もとから用意されているクラス【Adaptee】とClientが要求しているメソッドを定義した【Target】の間にあるずれを埋めるために、Adapterパターンを利用することで、以下のことが実現可能に。
    1.既存のクラスを変にいじることなどをせず、再利用ができる
    ー 必要とするクラスがすぐ作れる&保守がしやすい
    2.Clientに「Adapterの向こう側【Adaptee】」を意識させない
    ー 【Adaptee】のクラスに修正が入った場合、Client側をいじる必要がなく、【Adapter】のみ修正すればOK
  • PHPで使うGoFパターン ひとり Advent Calendar - アダプター - Qiita
    この記事でAdapterパターンに関して、以下のような注意点が述べられています。
    1.Adapterパターンは多用すると構造を追いづらくなる
    2.Adapterパターンは、既存システムを改修する時に、無関係な構造同士を結ぶ時にクイックハック的に使うものである
    3.初期設計から、Adapterパターンを適用するような設計はダメ
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away