JS設計モード三:ブリッジモード

4856 ワード

JS設計モード三:ブリッジモード
2013-12-25 11:56:46
JavaScript
ブリッジモード
    
ブリッジモードはソフトウェア設計モードの中で最も複雑な設計モードの一つである.物事の対象と具体的な行動、具体的な特徴を分離し、それぞれ独立して変化させる必要があります.ブリッジモードは中間で総コントロールのような役割を果たします.
    
物事の対象は抽象的な概念で、例えば「円」、「三角形」は抽象的な「形」の下、「円」と「三角形を描く」は具体的な行為の「図」の下にあり、「形」という抽象的なものは「図」の行動方法を呼び出すことができます.
    
具体的なコード例(ウィキペディアから):
    
下の言語のコードを使って、二つの異なる円の座標と半径を書きます.
API1.circle at 1:2 7.5
API2.circle at 5:7 27.5
  • /*「Implementor」*/
  • interface DrawingAPI
  • {
  • }
  •     public void drawCircule(double x,double y,double radius);
  •  
  • /*「CocreteImplementor」1/2*/
  • class DrawingAPI 1 implemens DrawingAPI
  • {
  • }
  •    public void drawCircule
  •    {
  • }
  •         System.out.printf(「API 1.circle at%f:%f radius%f」、x,y,radius)、
  •    }
  •  
  • /*「CocreteImplementor」2/2*/
  • class DrawingAPI 2 implemens DrawingAPI
  • {
  • }
  •    public void drawCircule
  •    {
  • }
  •         System.out.printf(「API.circele at%f:%f radius%f」、x,y,radius)、
  •    }
  •  
  • /*「Abstraction」*/
  • interface Shape
  • {
  • }
  •    public void draw()//low-level
  •    public void resize ByPercentage/high-level
  •  
  • /*「Refined Abstraction」*/
  • class Curce Shape implements Shape
  • {
  • }
  •    prvate double x,y,radius;
  •    prvate DrawingAPI drawingAPI;
  •    public Circle Shape(double x、double y、double radius、DrawingAPI drawingAPI)
  •    {
  • }
  •        this.x=x;this.y=y;this.radius=radius;
  •        this.drawingAPI=drawingg API;
  •    }
  •  
  •    //low-level i.e.Implementation specific
  •    public void draw()
  •    {
  • }
  •         drawingAPI.drawCircule(x,y,radius);
  •    }
  •    //high-level i.e.Abstract specific
  •    public void resize ByPercentage
  •    {
  • }
  •         radius*=pct;
  •    }
  •  
  • /*「Client」*/
  • class BridgePattern{
  • }
  •    public static void main(String[]args)
  •    {
  • }
  •        shapes=new Shapee[2];
  •        sharpes[0]=new Circure Shapee(1,2,3,new DrawingAPI 1);
  •        sharpes[1]=new Circure Shapee(5,7,11,new Drawing API 2);
  •  
  •        for(Shape sharpes)
  •        {
  • }
  •            sharpe.resizeByPercentage(2.5);
  •            sharpe.draw();
  •        }
  •    }
  • JSのブリッジモード
        
    簡単なブリッジモードは、APIを設計する際に、オブジェクト間(オブジェクトとクラス)の結合の程度を弱めることができるにほかならない.
  • function sendInfo{
  • }
  •     var id=element.id;
  •     ajax(「GET」、「info.json?id=」+id、function(rect){
  •          ...
  •     });
  •      ...
  •      
    そして、多くの場所またはイベントにおいてsendInfoの方法を使用したが、この方法の内部のajax要求と全体的な実現の「性質」は明らかである.違っています.ajax要求方法を独立してブリッジとajaxとコールバック関数を作成して、他のコードの機能を実行すると、全体の構造がより明確で合理的になり、既存の関数の内部メソッド間で呼び出された結合度を低減できます.
        
    彼の構造に対して一番簡単なブリッジモードを使うべきです.
  • function sendInfo{
  • }
  •     var id=element.id,
  •     calback=function{
  • }
  •       //...
  •     }
  •     sendInfoBridge(id,calback);
  •    //...
  • function sendInfoBridge(id,calback){
  • )
  •     ajax(「GET」、「info.json?id=」+id、function(rect){
  •         calback(result);
  •     });
  •    //...
  •     
    簡単な処理は、構造的により明確になります. sendInfoの中の一部の方法が逸脱して独立の方法を形成します.ここでブリッジはajax要求とid、calbackなどの橋渡しと見られます.
    ブリッジモード連結複数クラス
  • var Class 1=function(a,b,c){
  •     this.a=a;
  •     this.b c=b*c;
  • var Class 2=function(d){
  •     this.d=d;
  • function Bridge Class(a,b,c,d){
  •     this.class 1=new Class 1(a,b,c);
  •     this.class 2=new Class 2(d);
  •  
      
    しかし、ここでの役割は結合度を低下させるものではなく、むしろ新しく作成された構造関数を以前の構造関数Class 1とClass 2に依存させ、スーパーは外観モードに似ていますか?
        
    実はここの例はあまりにも簡単です.簡単に言えば、クラス1とクラス2は二つの「性質」が違っています.一番上のウィキペディアの例のsharpeと 
    DrawingAPI、
     
    Bridge Classは二つの種類を結びつけてshapeが呼び出されるようにします. 
    DrawingAPIの中間橋渡し.
    前のコンストラクション関数Class 1とクラス2に依存しています.それ自体は両方を実現していますので、2つのコードはメインプログラムから独立しています.依存ではありません.
        
    この方式はアダプターモードと外観モード(外観モード)と似ていますが、
            
    アダプターモードとの違い
    :顧客に適切なデータを提供するように要求していません.包装器として、インターフェースを適応させて、異なる環境での互換性を保証します.
            
    見栄とは違っています.
    : オンスクリーンモードは単純なインターフェースを提供するだけで、顧客が使用するために高級なインターフェースを提供し、サブシステムがより使いやすいようにします.
    ブリッジモードでは 
    クラス1とクラス2は独立できます. 
    Bridge Classは変わっていますが、外観パターンは違います.
        多くの場合、コードの構築があまりにも合理的でなく、複雑すぎて、もっと簡単な方法で論理を処理していることが分かります.しかし、このような処理コードの全体的な影響を見ていないかもしれません.ここでは複雑な例を挙げません.往々にして複雑な牛が騒いでいる例は勉強と理解の気持ちがないです.
    参考資料:
        1.ウィキペディア-ブリッジモード http://zh.wikipedia.org/wiki/%E6%A9%8B%E6%8E%A5%E6%A8%A1%E5%BC%8F
        2.『JS設計モード』