iT邦幫忙

2024 iThome 鐵人賽

DAY 14
2

介紹

裝飾模式讀完後,最好的理解就是稱號的概念
例如我們有個會員系統

  1. 一開始加入時給的稱號是夥伴
  2. 會員花一千就會拿到很油稱號,變成很油夥伴
  3. 會員再花一萬就會拿到狂熱稱號,變成狂熱很油夥伴

裝飾模式實作

  1. 建立粉絲介面
public interface Fans {

    String getTitle();
}
  1. 建立稱號抽象類別
public abstract class Title implements Fans {

    protected Fans fans;

    public Title(Fans fans) {
        this.fans = fans;
    }

    @Override
    public String getTitle() {
        return fans.getTitle();
    }
}
  1. 建立會員類別,稱號是夥伴
public class Member implements Fans {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String getTitle() {
        return "夥伴";
    }
}
  1. 建立很油類別,用來當稱號
public class Oil extends Title {

    public Oil(Fans fans) {
        super(fans);
    }

    @Override
    public String getTitle() {
        return "很油" + super.getTitle();
    }
}
  1. 建立狂熱類別,用來當稱號
public class Fire extends Title {

    public Fire(Fans fans) {
        super(fans);
    }

    @Override
    public String getTitle() {
        return "狂熱" + super.getTitle();
    }
}

裝飾模式測試

  1. 測試案例
StringBuilder text = new StringBuilder();

Fans member = new Member();
text.append("\n");
text.append("會員加入獲得稱號: ");
text.append(member.getTitle());
text.append("\n");

Oil oil = new Oil(member);
text.append("會員花一千獲得稱號: ");
text.append(oil.getTitle());
text.append("\n");

Fire fire = new Fire(oil);
text.append("會員花一萬獲得稱號: ");
text.append(fire.getTitle());
text.append("\n");

assertEquals("測試", text.toString());
  1. 執行測試
會員加入獲得稱號: 夥伴
會員花一千獲得稱號: 很油夥伴
會員花一萬獲得稱號: 狂熱很油夥伴

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

尚未有邦友留言

立即登入留言