程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java設計形式之橋形式(Bridge形式)引見

Java設計形式之橋形式(Bridge形式)引見

編輯:關於JAVA

Java設計形式之橋形式(Bridge形式)引見。本站提示廣大學習愛好者:(Java設計形式之橋形式(Bridge形式)引見)文章只能為提供參考,不一定能成為您想要的結果。以下是Java設計形式之橋形式(Bridge形式)引見正文


Bridge界說:將籠統和行動劃離開來,各自自力,但能靜態的聯合。

為何應用橋形式

平日,當一個籠統類或接口有多個詳細完成(concrete subclass),這些concrete之間關系能夠有以下兩種:

1.這多個詳細完成之間正好是並列的,如後面舉例,打樁,有兩個concrete class:方形樁和圓形樁;這兩個外形上的樁是並列的,沒有概念上的反復,那末我們只需應用繼續便可以了。
2.現實運用上,經常有能夠在這多個concrete class之間有概念上堆疊。那末須要我們把籠統配合部門和行動配合部門各自自力開來,本來是預備放在一個接口裡,如今須要設計兩個接口,分離放置籠統和行動。

例如,一杯咖啡為例,有中杯和年夜杯之分,同時還有加奶 不加奶之分。假如用純真的繼續,這四個詳細完成(中杯 年夜杯 加奶 不加奶)之間有概念堆疊,由於有中杯加奶,也有中杯不加奶,假如再在中杯這一層再完成兩個繼續,很明顯凌亂,擴大性極差。那我們應用Bridge形式來完成它。

若何完成橋形式

以下面提到的咖啡 為例。我們本來盤算只設計一個接口(籠統類),應用Bridge形式後,我們須要將籠統和行動離開,加奶和不加奶屬於行動,我們將它們籠統成一個專門的行動接口。

先看看籠統部門的接口代碼:

public abstract class Coffee{
 CoffeeImp coffeeImp;
 public void setCoffeeImp() {
  this.CoffeeImp = CoffeeImpSingleton.getTheCoffeImp();
 }
 public CoffeeImp getCoffeeImp() {return this.CoffeeImp;}
 public abstract void pourCoffee();
}

個中CoffeeImp 是加不加奶的行動接口,看其代碼以下:

public abstract class CoffeeImp{
 public abstract void pourCoffeeImp();
}

如今我們有了兩個籠統類,上面我們分離對其停止繼續,完成concrete class:

//中杯
public class MediumCoffee extends Coffee{
 public MediumCoffee() {setCoffeeImp();}
 public void pourCoffee(){
  CoffeeImp coffeeImp = this.getCoffeeImp();
  //我們以反復次數來講明是沖中杯照樣年夜杯 ,反復2次是中杯
  for (int i = 0; i < 2; i++){
   coffeeImp.pourCoffeeImp();
  }
 }
}


//年夜杯

public class SuperSizeCoffee extends Coffee{
 public SuperSizeCoffee() {setCoffeeImp();}
 public void pourCoffee(){
  CoffeeImp coffeeImp = this.getCoffeeImp();
  //我們以反復次數來講明是沖中杯照樣年夜杯 ,反復5次是年夜杯
  for (int i = 0; i < 5; i++){
   coffeeImp.pourCoffeeImp();
  }
 }
}

下面分離是中杯和年夜杯的詳細完成.上面再對行動CoffeeImp停止繼續:

//加奶
public class MilkCoffeeImp extends CoffeeImp{
 MilkCoffeeImp() {}
 public void pourCoffeeImp(){
  System.out.println("加了厚味的牛奶");
 }
}

//不加奶
public class FragrantCoffeeImp extends CoffeeImp{
 FragrantCoffeeImp() {}
 public void pourCoffeeImp(){
  System.out.println("甚麼也沒加,幽香");
 }
}

Bridge形式的根本框架我們曾經搭好了,別忘卻界說中還有一句:靜態聯合,我們如今可以喝到至多四種咖啡:

1.中杯加奶
2.中杯不加奶
3.年夜杯加奶
4.年夜杯不加奶

看看是若何靜態聯合的,在應用之前,我們做個預備任務,設計一個單態類(Singleton)用來hold以後的CoffeeImp:


public class CoffeeImpSingleton{
 private static CoffeeImp coffeeImp;
 public CoffeeImpSingleton(CoffeeImp coffeeImpIn)
 {this.coffeeImp = coffeeImpIn;}
 public static CoffeeImp getTheCoffeeImp(){
  return coffeeImp;
 }
}
看看中杯加奶 和年夜杯加奶 是怎樣出來的:

//拿出牛奶
CoffeeImpSingleton coffeeImpSingleton = new CoffeeImpSingleton(new MilkCoffeeImp());

//中杯加奶
MediumCoffee mediumCoffee = new MediumCoffee();
mediumCoffee.pourCoffee();

//年夜杯加奶
SuperSizeCoffee superSizeCoffee = new SuperSizeCoffee();
superSizeCoffee.pourCoffee();

留意:Bridge形式的履行類如CoffeeImp和Coffee是一對一的關系,准確創立CoffeeImp是該形式的症結。

Bridge形式在EJB中的運用

EJB中有一個Data Access Object (DAO)形式,這是將貿易邏輯和詳細數據資本離開的,由於分歧的數據庫有分歧的數據庫操作。將操作分歧數據庫的行動自力籠統成一個行動接口DAO,以下:

1.Business Object (相似Coffee)
完成一些籠統的貿易操作:如尋覓一個用戶下一切的定單。觸及數據庫操作都應用DAOImplementor。
 
2.Data Access Object (相似CoffeeImp)
一些籠統的對數據庫資本操作。
 
3.DAOImplementor 如OrderDAOCS, OrderDAOOracle, OrderDAOSybase(相似MilkCoffeeImp FragrantCoffeeImp)
詳細的數據庫操作,如"INSERT INTO "等語句,OrderDAOOracle是Oracle OrderDAOSybase是Sybase數據庫。
 
4.數據庫 (Cloudscape, Oracle, or Sybase database via JDBC API)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved