国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

實例解析Java設計模式編程中的適配器模式使用

2019-11-26 14:21:28
字體:
來源:轉載
供稿:網友

平時我們會經常碰到這樣的情況,有了兩個現成的類,它們之間沒有什么聯系,但是我們現在既想用其中一個類的方法,同時也想用另外一個類的方法。有一個解決方法是,修改它們各自的接口,但是這是我們最不愿意看到的。這個時候Adapter模式就會派上用場了。

Adapter模式也叫適配器模式,是由GoF提出的23種設計模式的一種。Adapter模式是構造型模式之一,通過Adapter模式,可以改變已有類(或外部類)的接口形式。
適配器 模式 有三種方式,一種是對象適配器,一種是類適配器, 一種是接口適配器
以下舉例說明:
1.類適配器

類圖

2016511114620936.jpg (718×458)

public class DrawRectangle {//畫方   public void drawRectangle(String msg) {     System.out.println("draw Rectangle: " + msg);   } } public interface IDrawCircle {//畫圓的接口   void drawCircle(); } 


/**  * 類適配器 使用對象繼承的方式,是靜態的定義方式  * @author stone  *  */ public class DrawAdapter4Class extends DrawRectangle implements IDrawCircle {//既能畫方又能畫圓    @Override   public void drawCircle() {     System.out.println("DrawAdapter4Class: drawCircle");   }    } 

2.對象適配器

類圖:

2016511114706104.jpg (672×498)

/**  * 對象適配器: 使用對象組合的方式,是動態組合的方式。  * 既能畫方又能畫圓  * @author stone  * DrawAdapter是適配器,DrawRectangle屬于adapter,是被適配者,適配器將被適配者和適配目標(DrawCircle)進行適配  *  */ public class DrawAdapter4Object implements IDrawCircle {//既能畫方又能畫圓      private DrawRectangle drawRectangle;   public DrawAdapter4Object(DrawRectangle drawRectangle) {     this.drawRectangle = drawRectangle;   }      @Override   public void drawCircle() {     System.out.println("DrawAdapter4Object: drawcircle");   }      public void drawRectangle(String msg) {     drawRectangle.drawRectangle(msg);   }     } 

3.接口適配器
類圖

2016511114833646.jpg (414×508)

/*  * 接口適配器:接口中有抽象方法,我們只想實現其中的幾個,不想全部實現,  * 所以提供一個默認空實現,然后繼承自它,重寫實現我們想實現的方法  */ public interface IDraw {   void drawCircle();   void drawRectangle(); } 
/*  * 接口適配器 的默認實現  */ public class DefaultDrawAdapter implements IDraw {//畫方 畫圓 皆為空實現    @Override   public void drawCircle() {        }    @Override   public void drawRectangle() {        } } 


public class Test {   public static void main(String[] args) {     //對象適配器     DrawAdapter4Object objAdapter = new DrawAdapter4Object(new DrawRectangle());     objAdapter.drawCircle();     objAdapter.drawRectangle(" in DrawAdapter4Object");          System.out.println("--------------");          //類適配器     DrawAdapter4Class clzAdapter = new DrawAdapter4Class();     clzAdapter.drawCircle();     clzAdapter.drawRectangle("in DrawAdapter4Class");          System.out.println("--------------");          //接口適配器     MyDrawAdapter myDrawAdapter = new MyDrawAdapter();     myDrawAdapter.drawCircle();     myDrawAdapter.drawRectangle();   }      static class MyDrawAdapter extends DefaultDrawAdapter {      @Override     public void drawCircle() {       System.out.println("drawCircle in MyDrawAdapter");     }        } } 


打印

DrawAdapter4Object: drawcircle draw Rectangle: in DrawAdapter4Object -------------- DrawAdapter4Class: drawCircle draw Rectangle: in DrawAdapter4Class -------------- drawCircle in MyDrawAdapter 


適配器模式的三個特點:

1 適配器對象實現原有接口
2 適配器對象組合一個實現新接口的對象(這個對象也可以不實現一個接口,只是一個單純的對象)
3 對適配器原有接口方法的調用被委托給新接口的實例的特定方法

有人認為講解設計模式的例子都太簡單,看著感覺是那么回事,但是要是真想在項目開發中使用,還真是應用不到。其實我們不必在項目中刻意使用設計模式,而是應該從實際的設計問題出發,看哪個模式能解決我們的問題,就使用哪個模式。不要為了使用模式而使用模式,那樣就舍本逐末了,一般情況下,只要遵循一定的設計原則就可以了,設計模式也是根據這些原則被總結出來的,熟悉了這些原則,模式自然而然就有了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永康市| 叙永县| 平利县| 崇文区| 高雄市| 峨眉山市| 封丘县| 枝江市| 苗栗市| 阿尔山市| 云梦县| 许昌县| 连平县| 高雄市| 汨罗市| 娄底市| 正阳县| 格尔木市| 巧家县| 全州县| 都江堰市| 福贡县| 天水市| 扎鲁特旗| 宜良县| 松阳县| 阳春市| 林芝县| 文化| 闸北区| 永新县| 光泽县| 郸城县| 甘洛县| 辰溪县| 桓台县| 枝江市| 钟山县| 凤凰县| 永仁县| 四会市|