1. 程式人生 > >享元模式(Flyweight Pattern):簡單&粗暴解析

享元模式(Flyweight Pattern):簡單&粗暴解析

1.前言


2.目錄

模式目錄.png


3.含義

運用共享技術有效地支援大量細粒度物件的複用。


4.解決

1.相同物件或者相似物件重複建立。


5.原理

通過 【享元】這個中介,使用 “集合” 的方式儲存相同或者相似的物件 。

5.1 享元模式結構

享元結構1.png

5.2 結構分析

FlyWeight:定義共享物件的功能。
ConcreteFlyWeight:共享物件的具體實現。
FlyWeightFactory:封裝共享物件工廠。

5.3 例項(緩衝池)

  • 圖片的快取。

Cache

public interface Cache {
  byte[] getBytesForPicture();
}

PictureCache

public class PictureCache implements Cache{
    private String url;
    private byte
[] picturedatas; public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } //設定快取資料 public void setPicturedatas(byte[] picturedatas) { this.picturedatas = picturedatas; } //獲取快取資料 @Override public byte[] getBytesForPicture
() { return picturedatas; } }

CacheFactory

public class CacheFactory {
    private HashMap<String,PictureCache> hashMap = new HashMap<>();
    public Cache getCache(String url){
        //獲取快取物件
        if(hashMap.get(url)!=null){
            return hashMap.get(url);
        }
        //儲存快取物件
        PictureCache pictureCache = new PictureCache();
        pictureCache.setUrl(url);
        pictureCache.setPicturedatas(new byte[10]);
        hashMap.put(url,pictureCache);
        return pictureCache;
    }
}

6.優點

1.避免相同或者相似的物件重複建立。
2.享元模式的外部狀態相對獨立,而且不會影響其內部狀態,從而使得享元物件可以在不同的環境中被共享。


7.缺點

  1. 享元模式使得系統更加複雜,需要分離出內部狀態和外部狀態,這使得程式的邏輯複雜化。
    2.為了使物件可以共享,享元模式需要將享元物件的狀態外部化,而讀取外部狀態使得執行時間變長。

8.總結

  • 到此, 享元模式 就解析完畢,後續我會把上述 三大型別模式 下的各子模式進行解析分享,
    請繼續關注linhaojian_簡書
  • 如果喜歡我的分享,可以點選  關注  或者  ,你們支援是我分享的最大動力 。
    linhaojian的Github

歡迎關注linhaojian_CSDN部落格或者linhaojian_簡書

不定期分享關於安卓開發的乾貨。

設計模式(Design pattern):簡單&粗暴解析
單例模式(Singleton Pattern):簡單&粗暴解析
簡單工廠模式(Easy Factory Pattern):簡單&粗暴解析
工廠模式(Factory Pattern):簡單&粗暴解析):簡單&粗暴解析
抽象工廠模式(Abstract Factory Pattern):簡單&粗暴解析
建造者模式(Builder Pattern):簡單&粗暴解析
代理模式(Proxy Pattern):簡單&粗暴解析
裝飾器模式(Decorator Pattern):簡單&粗暴解析


寫技術文章初心

  • 技術知識積累
  • 技術知識鞏固
  • 技術知識分享
  • 技術知識交流