橋接模式--學習筆記

不管是門面模式,適配器模式,還是現在將的橋接模式,核心思想只有一個:就是軟件人員在進行代碼編寫的時候,對於兩個類之間需要進行關聯時,不要直接在一個類的代碼中調用另一個類的代碼,而是要通過這些設計模式,在兩個類之間建立一個類似緩衝器的類,從而將直接關聯的兩個類進行解耦。

橋接模式,顧名思義:就是把兩個類進行關聯,例如現在有兩個類,獎金類-----Bonus ,部門類-----Department.  獎金分爲:個人獎金,團隊獎金,進步獎金。部門分爲:人事部,銷售部,策劃部。如果不使用橋接模式(組合),而使用繼承模式(繼承),來簡歷他們的聯繫。代碼清單如下。

獎金:

public class Bonus(){
  public void computerBonus(){
  }
}

個人獎金:

public class PeopleBonus extends Bonus{
  public  void computerBonus(){
    System.out.print("正在計算個人獎金");  
  }
}
團隊獎金:

public class TeamBonus extends Bonus{
     public void computerBonus(){
       System.out.print("正在計算團隊獎金"): 
   }
}
進步獎金:省略,


銷售部個人獎金:

public class SalePeopleBonus extends PeopleBonus{

	public void computerBonus() {
		System.out.println("銷售部個人獎金");
		super.computerBonus();
	}
}


人事部個人獎金:

public class HrPeropleBonus extends PeopleBonus{

	public void computerBonus() {
		System.out.println("人事部個人獎金");
		super.computerBonus();
	}
}
策劃部個人獎金:省略。

後面還有:銷售部團隊獎金,人事部團隊獎金,策劃部團隊獎金。

                    銷售部進步獎金,人事部進步獎金,策劃部進步獎金。

我們發現一個超級嚴重的問題!這個繼承體系很龐大,雖然繼承關係很清晰,但是這些類的關係統統寫死了!!!你改變不得,你一改變父類,子類必要改!例如,現在獎金類-----Bonus,除了要實現計算獎金的功能,還要統計總共發放了多少獎金,一想很簡單呀!so easy!

那不就是這樣:‘

public class Bonus{
   public void computerBonus(){
   }
   //增加第二個方法
   public void computerAllMoney(){
  }
}
是啊!!很簡單!!但是你後面的子類通通要修改代碼了!!!這下你爽了!!!慢慢改啊。。加油!!!

所以我們發現如果功能發生改變,代碼的一改變,使用繼承關係,子類必受影響。那麼我們現在介紹使用橋接模式來解決這個問題,先分析一下,整個事件中,有兩個關鍵詞:部門+獎金,所以我們現在要解決的就是讓他們之間相互獨立,獨立運作!!各自發生改變都不能影響另一方!這就是我們要的效果。

我們首先定義一個部門接口:

public interface Department {
    //定義一個共同的要實現的方法
	public void computerBonus();		
}

在來定義一個抽象的獎金類,並!並!並!!建立他們之間的連接!!!!

public abstract class Bonus {
   private Department  department;
   public Bonus(Department  department){
	   this.department=department;
   }
   public void computerBonus(){
	   department.computerBonus();
   }
}


看到了嗎?把Department傳給他!定義完兩個類,我們就可以來實現他們了,首先是第一個大類:部門:銷售部+人事部+策劃部。

public class HrDepartment implements  Department{

	@Override
	public void computerBonus() {
       System.out.println("人事部");		
	}
}


public class SaleDepartment implements Department{

	public void computerBonus() {
	    System.out.println("銷售部門獎金計算");
 	}
}


public class 策劃 implements Department{

	public void computerBonus() {
	    System.out.println("策劃部門獎金計算");
 	}
}


接着是第二大類:獎金:個人獎金+團隊獎金+進步獎金

public class PeopleBonus extends Bonus{

	public PeopleBonus(Department department) {
		super(department);
	}

	public void computerBonus() {
		System.out.println("正在計算個人獎金:");
		super.computerBonus();
	}
}


public class TeamBonus extends Bonus{

	public TeamBonus(Department department) {
		super(department);
	}

	public void computerBonus() {
		System.out.println("正在計算團體獎金");
		super.computerBonus();
	}
}


那麼你建立他們的時候,就可以使用組合!!!來建立他們

public class Main {
	public static void main(String[] args) {
        Bonus peopleBonus=new PeopleBonus(new HrDepartment());
        peopleBonus.computerBonus();
        
        Bonus teamBonus=new TeamBonus(new HrDepartment());
        teamBonus.computerBonus();
	}
}

輸出結果:

正在計算個人獎金:
人事部
正在計算團體獎金
人事部







發佈了66 篇原創文章 · 獲贊 7 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章