Rarestyleへようこそ
C#,デザインパターン,UML,オブジェクト指向,Webサービス,iPAQ(モバイル) アクセス数: Number_0Number_0Number_7Number_5Number_1Number_2Number_2Number_4
インデント OCPとデザインパターン
インデント サンプルコードについて
インデント デザインパターン ひとくちメモ
インデント FactoryMethodパターン
インデント AbstractFactoryパターン
インデント Builderパターン
インデント Prototypeパターン
インデント Adapterパターン
インデント Bridgeパターン
インデント Compositeパターン
インデント Decoratorパターン
インデント Facadeパターン
インデント Flyweightパターン
インデント Proxyパターン
インデント TemplateMethodパターン
インデント Chain of Responsibilityパターン
インデント Commandパターン
インデント Iteratorパターン
インデント Mediatorパターン
インデント Mementoパターン
インデント Observerパターン
インデント Stateパターン
インデント Strategyパターン
インデント Visitorパターン
インデント 速習!デザインパターン第一回
インデント 速習!デザインパターン第二回
インデント 速習!デザインパターン第三回
インデント UMLとは
インデント UML入門
インデント オブジェクト指向
インデント クラス図
インデント アクティビティ図
インデント インタラクション図
インデント ユースケース図
インデント Rarestyle証明書サービス
インデント QRコード発行WSDL
インデント QRコード発行サンプル
インデント J2EE覚書
インデント FreeMind実践レポート
インデント モバイル情報
インデント Homeページ
インデント イベント&デジタルファッション
インデント ごあいさつ・免責情報
インデント お問い合わせ
デザインパターンでキャリアアップ

Adapterパターン (デザインパターン)

Adapterパターン 導入

Adapterパターンは異なるインターフェースを持つクラスをつなげます。イメージ的には形状の異なるもので接続することが出来ない場合、それぞれの間Adapterを入れるで接続することが可能になるものです。接続に必要なインターフェースと既存のインターフェースがずれている時に、インターフェース関連する部分を全て書き直すことのないようにしましょう

Adapterパターン ポイント

AdapterクラスはAdapteeクラスを保持する構造にします。Adapterのメソッドからは、Adapteeクラスのメソッドが 呼び出され実行できるようにします。つまり、Adapterの中でAdapteeの実行が行われます。(委譲)

UML Adapterパターン

C#ソースコード

Sample.cs

using System;

namespace Adapter
{

   //------------------------------------------------------------------
   //  デザインパターン (Adapter)
   //  既存のクラスにメソッド実装追加などの修正を加えることをしたくないとき
   //  Adapterクラスとなるものを新しく作り、そのクラスにメソッドを実装して
   //  橋渡ししてもらう
   //
   //-------------------------------------------------------------------

   public interface Iappreciate
   {
       //音楽を鑑賞することを抽象定義
       void Request();
   }

   //InLiveクラスの定義
   public class InLive :Iappreciate
   {
       public void Request()
       {
           Console.WriteLine("生Live中!!バッテリーはびんびん出ぜ♪");
       }
   }


   //AdapteeOnAirにはIappreciateインターフェースがないため
   //Request()で実行出来ません
   //私の持っているspecificRequest()メソッドで何とかならないかな?
   public class AdapteeOnAir
   {
       public void specificRequest()
       {
           Console.WriteLine("TV中継中!!バッテリーはびんびん出ぜ♪");
       }
   }


   //アダプタークラス登場
   //私はアダプタークラスです。お悩み解決します。
   //specificRequest()メソッドをRequest()メソッドで
   //動かして見せますぞ。
   public class Adapter :Iappreciate
   {
       private AdapteeOnAir AdapOnAir;

       public AdapteeOnAir Adaptee
       {
           set{this.AdapOnAir=value;}
       }

       public void Request()
       {
           //Adapteeに委譲します。
           this.AdapOnAir.specificRequest();
       }
   }

   /// <summary>
   /// Class1 の概要の説明です。
   /// </summary>
   class Class1
   {
       /// <summary>
       /// アプリケーションのメイン エントリ ポイントです。
       /// </summary>
       [STAThread]
       static void Main(string[] args)
       {
           //通常
           Iappreciate nomal =new InLive();
           nomal.Request();
           //互換
           //AdapterにAdapteeをセットします。
           Adapter Adap =new Adapter();
           Adap.Adaptee=new AdapteeOnAir();
           //インターフェースをあわせて実行
           Iappreciate extend =Adap;
           extend.Request();
       }
   }
}

Adapter 実行結果

adapter_fig

UMLプラグインによる描画 Adapterパターン

Javaソースコード Adapterパターン

Iappreciate.java
   1: package adapter;
   2: 
   3: //音楽鑑賞のインターフェース定義
   4: public interface Iappreciate {
   5:     
   6:     //”演奏を鑑賞する”と定義
   7:     void request();
   8: 
   9: }
InLive.java
   1: package adapter;
   2: 
   3: //具象ライブの定義
   4: public class InLive implements Iappreciate {
   5: 
   6:     //ライブでの音楽鑑賞の実装
   7:     public void request() {
   8: 
   9:         System.out.println("生Live中!!バッテリーはびんびんだせ♪");
  10:     }
  11: 
  12: }
AdapteeOnAir.java
   1: package adapter;
   2: 
   3: public class AdapteeOnAir {
   4: 
   5:     //音楽鑑賞の実装
   6:     public void specificRequest() {
   7:         System.out.println("TV中継!!バッテリーはびんびんだせ♪");
   8:     }
   9: 
  10: }
Adapter.java
   1: package adapter;
   2: 
   3: public class Adapter implements Iappreciate {
   4: 
   5: 
   6:     private AdapteeOnAir adapteeOnAir;
   7: 
   8:     public AdapteeOnAir getAdapteeOnAir() {
   9:         return adapteeOnAir;
  10:     }
  11: 
  12:     public void setAdapteeOnAir(AdapteeOnAir adapteeOnAir) {
  13:         this.adapteeOnAir = adapteeOnAir;
  14:     }
  15: 
  16:     //インターフェースをあわせます。
  17:     public void request() {
  18:         
  19:         //委譲による実行(Adapteeが実行します。)
  20:         this.adapteeOnAir.specificRequest();
  21:     }
  22: 
  23: }
StartClass.java
   1: package adapter;
   2: 
   3: public class StartClass {
   4: 
   5:     public static void main(String[] args) {
   6:     
   7:         //通常
   8:         Iappreciate nomal =new InLive();
   9:         nomal.request();
  10:         
  11:         //互換
  12:         //AdapterにAdapteeをセット
  13:         Adapter adapter =new Adapter();
  14:         adapter.setAdapteeOnAir(new AdapteeOnAir());
  15:         //インターフェースをあわせて実行
  16:         Iappreciate extend =adapter;
  17:         extend.request();
  18:     }
  19: }



コミュニティマーカーデザインパターン「ひとくちメモ」へ

コミュニティマーカーHomeへもどる

お天気情報
東京都 東京 - 今日の天気
晴時々曇 - リンク先
最高 最低
気温 36 28
湿度 96.8 82.4
取得日:2010/09/03 17:00:00  ST: True
東京都 東京 - 明日の天気
晴時々曇 - リンク先
最高 最低
気温 - -
湿度 - -
取得日:2010/09/03 17:00:00  ST: True
東京都 東京 - あさっての天気
曇時々晴 - リンク先
最高 最低
気温 34 27
湿度 93.2 80.6
取得日:2010/09/03 17:00:00  ST: True
大阪府 大阪 - 今日の天気
晴時々曇 - リンク先
最高 最低
気温 36 28
湿度 96.8 82.4
取得日:2010/09/03 17:00:00  ST: True
大阪府 大阪 - 明日の天気
晴時々曇 - リンク先
最高 最低
気温 36 28
湿度 96.8 82.4
取得日:2010/09/03 17:00:00  ST: True
大阪府 大阪 - あさっての天気
晴時々曇 - リンク先
最高 最低
気温 36 28
湿度 96.8 82.4
取得日:2010/09/03 17:00:00  ST: True
livedoorのWebサービスより提供
【工事中】お天気配信 ユーザー登録
Copyright 2006 Rarestyle このページへのリンクは確認不要です。
Programming by Xenon Project Team     postmaster@rarestyle.net
免責事項について
レアスタイルサイト内検索