程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java構造型設計形式中的適配器形式與橋接形式解析

Java構造型設計形式中的適配器形式與橋接形式解析

編輯:關於JAVA

Java構造型設計形式中的適配器形式與橋接形式解析。本站提示廣大學習愛好者:(Java構造型設計形式中的適配器形式與橋接形式解析)文章只能為提供參考,不一定能成為您想要的結果。以下是Java構造型設計形式中的適配器形式與橋接形式解析正文


適配器形式

界說
適配器形式(英語:adapter pattern)有時刻也稱包裝款式或許包裝。將一個類的接口轉接成用戶所等待的。一個適配使得因接口不兼容而不克不及在一路任務的類任務在一路。

有兩類適配器形式:
1. 對象適配器形式 - 對象適配器經由過程聯系關系知足用戶等待接口,還下降了代碼間的不良耦合。在任務中推舉應用“對象適配”。
2. 類適配器形式 - 這類適配器形式下,適配器繼續自已完成的類(普通多重繼續),java中沒有多重繼續,所以這裡不做引見。

完成

1. Target - 界說Client須要應用的辦法。
2. Adapter - 繼續或許完成Target,適配Adaptee的辦法到Target。
3. Adaptee - 界說一個曾經存在的辦法。
4. Client - 挪用Target中的辦法。

public class Adaptee { 
  public void specificRequest(){ 
    System.out.println("Hello, I am from Adaptee!"); 
  } 
} 
 
public interface Target { 
  public void request(); 
} 
 
public class Adapter implements Target { 
  Adaptee adaptee; 
  public Adapter(){ 
    adaptee = new Adaptee(); 
  } 
  public void request(){ 
    adaptee.specificRequest(); 
  } 
} 
 
public class Client { 
  public static void main(String[] args) { 
    Target target = new Adapter(); 
    target.request(); 
  } 
} 

要完成類適配器形式,我們須要Adapter繼續Adaptee。

實用場景
1. 你想應用一個舊類,而它的接口不相符你的需求,那末可使用Adapter類來作為中介類。
2. 你想創立一個可以通用的類,該類可以挪用一些不相干的類的接口來供你應用。


橋接形式

念頭
有些時刻一個籠統應當有分歧的完成,好比,保留數據時有兩種方法,一種是文件方法,一種是數據庫方法,平日的做法是繼續保留數據的類,然後完成分歧的保留方法。如許做的成績就是難於修正和擴大保留方法,運轉時沒法切換保留方法。

界說
橋接形式是軟件設計形式中最龐雜的形式之一,它將事物的籠統部門與它的完成部門分別,使它們都可以自力地變更。

如“圓形”、“三角形”歸於籠統的“外形”之下,而“畫圓”、“畫三角”歸於完成行動的“繪圖”類之下,然後由“外形”挪用“繪圖”。

1. Abstraction - 界說籠統辦法。
2. AbstractionImpl - 應用完成接口來完成籠統辦法。
3. Implementor - 為詳細完成行動界說接口。
4. ConcreteImplementor1, ConcreteImplementor2 - 完成Implementor接口。

/** "Implementor" */ 
interface DrawingAPI 
{ 
  public void drawCircle(double x, double y, double radius); 
} 
  
/** "ConcreteImplementor" 1/2 */ 
class DrawingAPI1 implements DrawingAPI 
{ 
  public void drawCircle(double x, double y, double radius)  
  { 
    System.out.printf("API1.circle at %f:%f radius %f\n", x, y, radius); 
  } 
} 
  
/** "ConcreteImplementor" 2/2 */ 
class DrawingAPI2 implements DrawingAPI 
{ 
  public void drawCircle(double x, double y, double radius)  
  {  
    System.out.printf("API2.circle at %f:%f radius %f\n", x, y, radius); 
  } 
} 
  
/** "Abstraction" */ 
interface Shape 
{ 
  public void draw();                      // low-level 
  public void resizeByPercentage(double pct);   // high-level 
} 
  
/** "Refined Abstraction" */ 
class CircleShape implements Shape 
{ 
  private double x, y, radius; 
  private DrawingAPI drawingAPI; 
  public CircleShape(double x, double y, double radius, DrawingAPI drawingAPI) 
  { 
    this.x = x; this.y = y; this.radius = radius;  
    this.drawingAPI = drawingAPI; 
  } 
  
  // low-level i.e. Implementation specific 
  public void draw() 
  { 
    drawingAPI.drawCircle(x, y, radius); 
  }   
  // high-level i.e. Abstraction specific 
  public void resizeByPercentage(double pct) 
  { 
    radius *= pct; 
  } 
} 
  
/** "Client" */ 
class BridgePattern { 
  public static void main(String[] args) 
  { 
    Shape[] shapes = new Shape[2]; 
    shapes[0] = new CircleShape(1, 2, 3, new DrawingAPI1()); 
    shapes[1] = new CircleShape(5, 7, 11, new DrawingAPI2()); 
  
    for (Shape shape : shapes) 
    { 
      shape.resizeByPercentage(2.5); 
      shape.draw(); 
    } 
  } 
} 

實例
1. 念頭外面提到的數據保留。
2. 圖形的繪制框架。相似下面代碼中的完成。

實用場景
1. 你不願望籠統和完成有固定的關系,願望可以在運轉時修正完成的方法。
2. 籠統和完成部門都可以自力的擴大,而不互相影響。

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