国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

設計模式之適配器模式

Drummor / 3049人閱讀

摘要:適配器模式將一個類的接口轉換為客戶期望的另一個接口。取桔子包裝準備用途蘋果盒代替把蘋果盒適配成桔子包裝盒桔子包裝適配器適配器模式結構圖用法繼承,同時組合對象引入成員變量使和產生關聯。

適配器模式:將一個類的接口轉換為客戶期望的另一個接口。適配器讓原本接口不兼容的類可以合作無間。

場景:水果店賣有橘子和蘋果,橘子用橘子包裝盒,蘋果用蘋果包裝盒,顧客A來買橘子,但是沒有橘子包裝盒了,則用蘋果包裝盒暫時替代一下。

/**
 * 桔子
 * 
 */
public class Orange implements Fruit {
    private String name = "";
    private int price = 70;

    public Orange(String name,int price){
        this.price = price;
        this.name = name;
    }

    public void pack(OrangeBag bag){
        bag.pack();
    }

    @Override
    public int price() {
        return price;
    }

    @Override
    public void draw() {
        System.out.print("砂糖桔");
    }

    public int accept(Visit visit){
        return visit.sell(this);
    }

    public void setPrice(int price) {
        this.price = price;
    }
}



  /**
 * 桔子包裝
 * 
 */
public class OrangeBag implements Bag {
    @Override
    public void pack() {
        System.out.print("--桔子使用網兜包裝");
    }
}


 /**
 * 蘋果包裝
 * Created by Peter on 10/9 009.
 */
public class AppleBag implements Bag {
    @Override
    public void pack() {
        System.out.print("--蘋果使用紙箱包裝");
    }
}



 /**
 * 水果接口
 */
public interface Fruit {

    int price();

    void draw();

    int accept(Visit visit);

}

/**
 * 包裝接口
 */
public interface Bag {

    void pack();

}

測試代碼如下: main方法里面,new一個橘子,再獲取一個橘子包裝實例。
如今橘子包裝沒了,用蘋果包裝代替一下。

public class AdapterClient {
    public static void main(String[] args){
        Orange orange = new Orange("peter",100);
        OrangeBag bag = getBag2();
        orange.pack(bag);
    }

    /**
     * 取桔子包裝
     * @return
     */
//    private static OrangeBag getBag(){
//        OrangeBag bag = new OrangeBag();
//        return bag;
//    }

    private static OrangeBag getBag2(){
        //準備用途蘋果盒代替
        AppleBag appleBag = new AppleBag();

        //把蘋果盒適配成桔子包裝盒
        OrangeBag orangeBag = new OrangeBagAdapter(appleBag);

        return orangeBag;
    }
}


  /**
 * 桔子包裝適配器
 */
public class OrangeBagAdapter extends OrangeBag {
    private AppleBag appleBag;

    public OrangeBagAdapter(AppleBag appleBag){
        this.appleBag = appleBag;
    }

    @Override
    public void pack() {
        appleBag.pack();
    }
}

適配器模式結構圖:

用法:

1.OrangeBagAdapter繼承OrangeBag,同時組合AppleBag對象(引入成員變量),使OrangeBag和AppleBag產生關聯。

2.當OrangeBag目標方法被調用時,OrangeBagAdapter轉調AppleBag的對象方法。

備注:OrangeBag和AppleBag都是已有類,是系統已有方法。整個過程只需要新增一個適配器類,去充當OrangeBag的實現。

這個適配器模式充滿良好的OO設計原則:

1.使用了對象的組合,以修改的接口(即上文的OrangeBagAdapter的pack()方法)包裝被適配者(即上文的蘋果包裝AppleBag);

2.這種做法還有額外的優點就是被適配者的的任何子類都可以搭配著適配器使用。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74543.html

相關文章

  • 一天一個設計模式JS實現——配器模式

    摘要:本文參考于設計模式課程設計模式之適配器模式設計模式是一套被反復使用的多數人知曉的經過分類編目的代碼設計經驗的總結。第一個設計模式是適配器模式。總的來說適配器就是的模式,與修飾模式直接無感使用不同,適配器模式使用對象變為。 本文參考于:設計模式課程設計模式之適配器模式 設計模式是一套被反復使用的、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了重用代碼、讓代碼更容易被...

    Aceyclee 評論0 收藏0
  • 轉換插座配器模式

    摘要:適配器模式之數據格式轉換適配器模式不僅可以起到適配接口名的作用,它另外還有一個功能就是能統一不同格式的作用。我們的目的就是在程序中,不要出現適配器模式,但考慮到實際,這也是不可能的,所以盡量將代碼設計符合規范是非常必要的。 這個模式應該算是除了單例模式以外最簡單的一個模式,沒有多余的類,這個模式只有一個職責,就是轉換的你接口參數,歸一化接口調用函數,同意參數格式。 說人話~其實就是,將...

    MudOnTire 評論0 收藏0
  • JavaScript設計模式配器模式

    摘要:舊接口格式和使用者不兼容,中間加一個適配器轉換接口。模式作用使用一個已經存在的對象,但其方法或接口不符合你的要求。 原文博客地址:https://finget.github.io/2018/11/22/adapter/ 適配器模式 適配器模式(Adapter)是將一個類(對象)的接口(方法或屬性)轉換成客戶希望的另外一個接口(方法或屬性),適配器模式使得原本由于接口不兼容而不能一起工作...

    CNZPH 評論0 收藏0
  • 設計模式配器模式

    摘要:定義和類型定義將一個類的接口轉換成客戶期望的另一個接口,適配器模式讓那些不兼容的類可以一起工作。類型結構型類適配器模式類適配器模式使用繼承的方式去實現接口適配。它是適配器模式的核心。 0x01.定義和類型 定義:將一個類的接口轉換成客戶期望的另一個接口,適配器模式讓那些不兼容的類可以一起工作。 類型:結構型 a.類適配器模式 類適配器模式:使用繼承的方式去實現接口適配。 UML:...

    booster 評論0 收藏0
  • PHP設計模式配器模式

    摘要:簡介適配器模式有時候也稱包裝樣式或者包裝將一個類的接口適配成用戶所期待的。應用場景如程序數據庫有關聯等操作,而你需要根據情況換數據庫操作時,可以使用適配器模式統一接口,這樣代碼中除了數據庫配置之外,就不需要做而外的更改。 簡介 適配器模式(有時候也稱包裝樣式或者包裝)將一個類的接口適配成用戶所期待的。一個適配允許通常因為接口不兼容而不能在一起工作的類工作在一起。 UML 角色 Tar...

    netScorpion 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<