Android Ap 開發 設計模式第九篇:橋接模式

Bridge Patternapp

模式解讀

  bridge 是「橋樑」的意思。就像現實社會裏的橋樑擔負着鏈接兩岸的重大責任同樣,Bridge Pattern也是負責鏈接2個不一樣位置的參與者。ide

  橋接模式溝通着「功能的類層次」和「實現的類層次」。將「功能的類層次」和「實現的類層次」分紅2個獨立的類層次可能會弄得支離破碎,因此必須在2個類層次之間建一座溝通的橋樑。ui

 

程序示例

  按照上面的分法,本例能夠分爲4個類按照「功能的類層次」和「實現的類層次」分開,分別爲:this

功能的類層次

  Display   該類爲打印內容的類spa

  CountDisplay   該類不只能夠打印內容還能夠參數指定打印次數3d

實現的類層次

  DisplayImpl  該類爲抽象類,抽象出打印內容所須要的功能code

  StringDisplayImpl  該類實現了DisplayImpl 所抽象出來的功能對象

 

  按照如上劃分,製做出了UML圖,以下:blog

 

  功能的類層次:Display 類,代碼:

 

public   class  Display {

    
private  DisplayImpl impl;

    
public  Display(DisplayImpl impl) {
        
this .impl  =  impl;
    }

    
public  String open() {
        
return  impl.rawOpen();
    }

    
public  String print() {
        
return  impl.rawPrint();
    }

    
public  String close() {
        
return  impl.rawClose();
    }

    
public  final String display() {
        open();

        String text 
=  print();

        close();
        
return  text;
    }
}

  該類經過參數將DisplayImpl傳進來,直接讓Display 有DisplayImpl的功能。該功能也是Builder Pattern 的模式。位於「功能的類層次」最上層的類,利用接口參與者的方法只記載基本功能的類。這個對象實例是保持住接口參與者。該類爲扮演這個參與者的類。接口

 

  功能的類層次:CountDisplay類 ,代碼:

 

public   class  CountDisplay extends Display {

    
public  CountDisplay(DisplayImpl impl) {
        super(impl);
        
//  TODO Auto-generated constructor stub
    }

    
public  String multiDisplay( int  times) {
        StringBuffer sb 
=   new  StringBuffer();
        sb.append(open()
+ " \n " );
        
for  ( int  i  =   0 ; i  <  times; i ++ ) {
            sb.append(print()
+ " \n " );
        }
        
return  sb.append(close()).toString();
    }
}

 

  該類系Display 的子類,而且再添加一個可按照次數循環打印的方法。對抽象參與者新增功能的參與者(改良後的抽象化),該類扮演在這個DEMO中扮演着這個角色。

 

  實現的類層次:DisplayImpl 類,代碼:

 

public   abstract   class  DisplayImpl {
    
public   abstract  String rawOpen();
    
    
public   abstract  String rawPrint();
    
    
public   abstract  String rawClose();
}

  

  該類位於實現的類層次的最上層,分別抽象了rawOpen、rawPrint、rawClose三個方法,這三個方法分別對應到Display 類的open、print、close方法,執行前處理、打印和後處理。規定要實現的抽象參與者的接口 。

 

  實現的類層次:StringDisplayImpl 類,代碼:

 

public   class  StringDisplayImpl extends DisplayImpl{

    
    
private  String  string ;    
    
    
public  StringDisplayImpl(String str){
        
this . string = str;
    }
    
    @Override
    
public  String rawClose() {
        
//  TODO Auto-generated method stub
         return  printLine();
    }

    @Override
    
public  String rawOpen() {
        
//  TODO Auto-generated method stub
         return     printLine();
    }

    @Override
    
public  String rawPrint() {
        
//  TODO Auto-generated method stub
         return   " | " + string + " | " ;
    }
    
    
private  String printLine(){
        StringBuffer sb
= new  StringBuffer();
        sb.append(
" + " );
        
for ( int  i = 0 ;i < string .length();i ++ ){
            sb.append(
" - " );
        }
        
return  sb.append( " + " ).toString();
    }

}

  

  該類實現了DisplayImpl的三個抽象方法,本例中惟一一處實現功能的也是由本類完成。具體實現接口 參與者的接口 。

 

  界面入口:BridgePatternActivity 類,代碼:

public   class  BridgePatternActivity extends Activity {
    
/* * Called when the activity is first created.  */
    @Override
    
public   void  onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        
        ((Button)findViewById(R.id.Button01)).setOnClickListener(
new  OnClickListener() {
            
            @Override
            
public   void  onClick(View v) {
                
//  TODO Auto-generated method stub
                
                
                Display display
= new  Display( new  StringDisplayImpl( " terry_龍 " ));
                
                CountDisplay mCountDisplay
= new  CountDisplay( new  StringDisplayImpl( " terry " ));
                
                ((EditText)findViewById(R.id.EditText01)).setText(display.print());
                
                
                ((EditText)findViewById(R.id.EditText02)).setText(mCountDisplay.multiDisplay(
5 ));
                
            }
        });
        
    }
}


運行結果:

 

  代碼下載:

橋接模式

相關文章
相關標籤/搜索