Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android Ap 開發 設計模式第九篇:橋接模式

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

編輯:Android開發實例

  Bridge Pattern

模式解讀

  bridge 是“橋梁”的意思。就像現實社會裡的橋梁擔負著連接兩岸的重大責任一樣,Bridge Pattern也是負責連接2個不同位置的參與者。

  橋接模式溝通著“功能的類層次”和“實現的類層次”。將“功能的類層次”和“實現的類層次”分成2個獨立的類層次可能會弄得支離破碎,所以必須在2個類層次之間建一座溝通的橋梁。

 

程序示例

  按照上面的分法,本例可以分為4個類按照“功能的類層次”和“實現的類層次”分開,分別為:

功能的類層次

  Display   該類為打印內容的類

  CountDisplay   該類不僅可以打印內容還可以參數指定打印次數

實現的類層次

  DisplayImpl  該類為抽象類,抽象出打印內容所需要的功能

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

 

  按照如上劃分,制作出了UML圖,如下:

 

  功能的類層次: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));
                
            }
        });
        
    }
}


運行結果:

 

  代碼下載:

橋接模式

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved