まさるblog

越後在住子持ちプログラマー奮闘記 - Author:まさる(高野 将、TAKANO Sho)

目次

Blog 利用状況

ニュース

著書

2010/7発売


Web掲載記事

@IT

.NET開発を始めるVB6プログラマーが知るべき9のこと

CodeZine

実例で学ぶASP.NET Webフォーム業務アプリケーション開発のポイント

第1回 3層データバインドを正しく活用しよう(前編)

ブログパーツ


書庫

日記カテゴリ

コミュニティ

デザインパターンを学ぶ~その24:Adapterパターン(1)~

Adapter
 適合者

Adapterパターンはその名の通り、クラスのインターフェースを「適合」させるためのパターンです。

ベンダーが作成したクラスなど、手を加えられないクラスに対して、統一したインターフェースを実現したい場合に用います。

 

例をあげましょう。まず、以下のようなインターフェイスがあったとしましょう。

// しゃべれるインターフェース
interface ISpeakable
{
	void Speak();
}

そして、ISpeakableインターフェイスを実装した人間クラスがあります。

// 人間クラス
class Human : ISpeakable
{
	// しゃべる
	public void Speak()
	{
		Console.WriteLine("こんにちは");
	}
}

今回は、次のようなDuckクラスも、Humanクラスと同じように使用したいと考えています。

// アヒルクラス
class Duck
{
	// 鳴く
	public void Quack()
	{
		Console.WriteLine("クワックワッ");
	}
}

こういったときAdapterパターンを使ってDuckに適合するAdapterクラスを作成します。

 

なお、Adapterパターンには大きく分けて、「継承型」と「委譲型」があります。今回は「継承型」を紹介します。

// 継承Adapter
class InheritanceSpeakAdapter : Duck, ISpeakable
{
	// しゃべる
	public void Speak()
	{
		// 基底クラスのメソッドを呼び出す
		Quack();
	}
}

継承型のAdapterパターンでは、インターフェースを適合させたいクラスを継承した上で、インターフェイスを実装します。

そして、インターフェイスのメソッドを実装する際、基底クラスのメソッドを呼び出すように設定します。

 

それでは、実行してみましょう。

class Program
{
	static void Main(string[] args)
	{
		// 人間がしゃべる
		{
			var speaker = new Human();
			speaker.Speak();
		}

		// アヒルがしゃべる
		{
			var speaker = new InheritanceSpeakAdapter();
			speaker.Speak();
		}
	}
}

image

 

同一の呼び出し方で、人間とアヒルにしゃべらせることができました。

 

次回は委譲型のAdapterパターンを紹介します。

投稿日時 : 2010年3月8日 23:25

Feedback

# デザインパターンを学ぶ~その25:Adapterパターン(2)~ 2010/03/10 23:52 まさるblog

デザインパターンを学ぶ~その25:Adapterパターン(2)~

タイトル
名前
Url
コメント