程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java中的橋接模式

java中的橋接模式

編輯:關於JAVA

橋接模式的英文是 Bridge ,橋接模式關注抽象的設計。抽象是指包含了一組抽象方法的類,這些抽象方 法可能包含多個實現。

實現抽象的一般做法是創建類的層次結構,該層次結構的頂部是一個包含抽象 方法的抽象類,該類的每一個子類都提供這些抽象方法的不同實現。但是,當需要對該層次進行子類化時,這 一做法就存在不足了。

你可以創建一個橋,然後把這些抽象方法移到接口中,這樣,抽象就依賴於接 口的實現。

橋接模式的意圖是:將抽象與抽象方法的實現相互分離來實現解耦,以便二者可以相互獨 立的變化。

上面這段話的意思就是說實現與抽象相分離。

下面舉個例子說明:

1.現在 水果裡有 蘋果和橘子

2.人分為 男人和女人

3.人都可以吃水果,所以有 2*2 = 4 中情況

如果我們不用橋接模式,那麼實現這麼多情況就需要一個一個的去實現,也就是4類,那麼我們使用橋 接模式呢?答案是:2類。這在條件和實現比較多的情況下優勢會更明顯。

具體的實現:

下面 首先給出實現的UML圖

實現的代碼和說明如下:

1.Fruit類

package com.brucezhang.bridge;  
      
public abstract class Fruit {  
          
    /** 
     * 抽象方法 
     * @param People 
     * */
          
    public abstract void eatFruit(People people);  
}

這是一個抽象類,是所有水果的抽象,其中的一個抽象方法是對水果執行的動作,也就是將來我們 需要對水果執行的操作,參數是人。

2.Apple類

package com.brucezhang.bridge;  
      
public class Apple extends Fruit{  
      
    @Override
    public void eatFruit(People people) {  
        // TODO Auto-generated method stub  
        System.out.println(people.getType() + " eat apple !");  
    }  
      
}

3.Oranger類

package com.brucezhang.bridge;  
      
public class Oranger extends Fruit{  
      
    @Override
    public void eatFruit(People people) {  
        // TODO Auto-generated method stub  
        System.out.println(people.getType() + " eat oranger !");  
    }  
      
}

這兩個類都是水果類的具體實現,都代表的具體的東西,其中需要重載水果類中的抽象方法,且各 自都有各自不同的實現。

4.People類

package com.brucezhang.bridge;  
      
public abstract class People {  
      
    private String type;  
    private Fruit fruit;  
          
          
    public String getType() {  
        return type;  
    }  
      
      
    public void setType(String type) {  
        this.type = type;  
    }  
      
      
    public Fruit getFruit() {  
        return fruit;  
    }  
      
      
    public void setFruit(Fruit fruit) {  
        this.fruit = fruit;  
    }  
      
    //抽象方法  
    public abstract void eat();  
          
          
}

這個類是抽象的人,裡面有兩個參數,一個參數是水果,一個參數是類型(代表是男人或是女人)

5.Man類

package com.brucezhang.bridge;  
      
public class Man extends People{  
          
    public Man(){  
        setType("Man");  
    }  
      
    @Override
    public void eat() {  
        // TODO Auto-generated method stub  
        getFruit().eatFruit(this);  
    }  
      
}

6.Woman類

package com.brucezhang.bridge;  
      
public class Woman extends People{  
          
    public Woman(){  
        setType("Woman");  
    }  
      
    @Override
    public void eat() {  
        // TODO Auto-generated method stub  
        getFruit().eatFruit(this);  
    }  
          
}

這兩個類繼承自People類,是具體的“人”,其中重寫了父類方法,並在構造函數中說明是“什麼 人”

7.測試類--Main_Test

package com.brucezhang.bridge;  
      
public class Main_Test {  
          
    public static void main(String[] args) {  
              
        People man = new Man();  
        People woman = new Woman();  
              
        Fruit apple = new Apple();  
        Fruit oranger = new Oranger();  
              
        apple.eatFruit(man);  
        oranger.eatFruit(woman);  
        apple.eatFruit(woman);  
        oranger.eatFruit(man);  
    }  
}

這裡是對橋接模式的測試。

程序執行的結果如下:

Man eat apple !  
Woman eat oranger !  
Woman eat apple !  
Man eat oranger !
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved