Java設計モード-アダプタ(Adapter)


もし今12 Vの直流電力を使うノートパソコンがあるならば、プラグを220 Vの交流電源に接続して、直接電源に接続してノートパソコンが清算すると思います.ACアダプタ(ACアダプタ)が必要です.ACアダプタは、家庭用の220 V AC電源を必要な12 V DCに変換します.アダプタの機能は、既存の電源と必要な電源の間に介入し、コミュニケーションの架け橋として機能します.アダプタの原文はadapterで、「似合う」という意味です.
プログラム設計では「アダプタ」も必要ですが、既存のコンテンツが直接利用できない場合は、通常必要なタイプに変換して使用し、変換機能を実現するのが
Adapter Pattern
 
Adapter Patternには、次の2つのケースがあります.
  • クラスのAdapter Pattern(継承)
  • オブジェクトのAdapter Pattern(委任)
  • 次のプログラムはクラスのAdapter Pattern出力文字列「$Hello$」と「*Hello*」を使用します.
    プログラム例1
      1.Printインタフェースは、私たちが必要とする内容と見なすことができます.
    package com.pattern.adapter;
    
    public interface Print {
    	public abstract void printWeak();
    	public abstract void printStrong();
    }

       2.既存の内容
    package com.pattern.adapter;
    
    public class Banner {
    	private String string;
    	public Banner(String string) {
    		this.string = string;
    	}
    	
    	public void showWithParen() {
    		System.out.println("$"+string+"$");
    	}
    	
    	public void showWithAster() {
    		System.out.println("*"+string+"*");
    	}
    }
    

      3.アダプタは、既存のコンテンツを必要なものに変換します.
    package com.pattern.adapter;
    
    /**
     *     
     * @author administrator
     */
    public class PrintBanner extends Banner implements Print {
    	
    	public PrintBanner(String string) {
    		//         
    		super(string);
    	}
    	//        
    	public void printStrong() {
    		showWithParen();
    	}
    	//        
    	public void printWeak() {
    		showWithAster();
    	}
    
    }
    
    

      4.テストクラス
    package com.pattern.adapter;
    
    public class Main {
    	public static void main(String[] args) {
    		Print p =new PrintBanner("Hello");
    		//      
    		p.printWeak();
    		//      
    		p.printStrong();
    	}
    }
    

     
    MainクラスのソースコードからはBannerクラス、showWithParen()、showWtihAster()メソッドが全く見えないようで、ノートパソコンに12 Vの直流電力を供給している人しかいないようで、その正体(Adapterアダプタの反対側)を知らないとなんと220 Vの交流です!
     
    以下のコードは、オブジェクトの委任実装プログラム例1の機能を採用する
    プログラム救命2:
      1.ここのPrintはインタフェースではなく抽象クラスであることに注意してください.
    package com.pattern.adapter;
    
    public abstract Print {
    	public abstract void printWeak();
    	public abstract void printStrong();
    }

      2.アダプタ、オブジェクト委任モードを採用
    package com.pattern.adapter;
    
    /**
     *     
     * @author administrator
     */
    public class PrintBanner extends Print {
    	private Banner banner;
    	public PrintBanner(String string) {
    		this.banner = new Banner(string);
    	}
    	//        
    	public void printStrong() {
    		banner.showWithParen();
    	}
    	//        
    	public void printWeak() {
    		banner.showWithAster();
    	}
    }
    
    

     
     
    テストクラス同上
      
    設計思想:
    1つのクラスのインタフェースをクライアントが期待する別のインタフェースに変換し、インタフェースの原因で一致せずに一緒に動作できなかった2つのクラスを一緒に動作させる.適合クラスは、パラメータに基づいて適切なインスタンスをクライアントに返すことができる.