iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0

介紹

轉接器模式在 Android 開發一定會知道,因為做列表一定會用到,但有其他的情況下會用到 Adapter 嗎?

假如我有兩個會員系統

  1. 家樂福會員:有會員等級功能
  2. 全家會員:有會員年齡功能

今天接到一個需求

  1. 要把家樂福的等級給全家使用
  2. 全家依照年齡分成年輕會員和老人會員

轉接器模式實作

  1. 家樂福介面
public interface Carrefour {
    String getLevel();
}
  1. 全家介面
public interface Family {
    void setAge(int age);
    
    int getAge();
}
  1. 家樂福會員實作
public class CarrefourMember implements Carrefour {

    @Override
    public String getLevel() {
        return "Gold";
    }
}
  1. 全家會員實作
public class FamilyMember implements Family {

    private int age;

    @Override
    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public int getAge() {
        return age;
    }
}
  1. 建立家樂福轉全家轉接器
public class Adapter implements Carrefour {

    private final Family family;

    public Adapter(Family family) {
        this.family = family;
    }

    @Override
    public String getLevel() {

    }
}
  1. 全家依照年齡分成年輕會員和老人會員
public class Adapter implements Carrefour {

    private final Family family;

    public Adapter(Family family) {
        this.family = family;
    }

    @Override
    public String getLevel() {
        String level;
        if (family.getAge() > 36) {
            level = "Old";
        } else {
            level = "young";
        }
        return level;
    }
}

轉接器模式測試

  1. 測試案例
@Test
public void show() {
    //建立老會員
    FamilyMember familyOld = new FamilyMember();
    familyOld.setAge(40);
    Carrefour carrefourOld = new Adapter(familyOld);
    String levelOld = carrefourOld.getLevel();
    //建立新會員
    FamilyMember familyYoung = new FamilyMember();
    familyYoung.setAge(25);
    Carrefour carrefourYoung = new Adapter(familyYoung);
    String levelYoung = carrefourYoung.getLevel();
    StringBuilder text = new StringBuilder();
    text.append("\n");
    text.append("40歲會員等級:");
    text.append(levelOld);
    text.append("\n");
    text.append("25歲會員等級:");
    text.append(levelYoung);
    text.append("\n");
    assertEquals("測試", text.toString());
}
  1. 執行測試
40歲會員等級:Old
25歲會員等級:young

上一篇
113/11 - 合成模式(Composite)- Kotlin
下一篇
113/13 - 轉接器模式(Adapter)- Kotlin
系列文
肯定會斷賽之在 Android 開發使用設計模式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言