设计模式的理解:享元模式 (Flyweight)
生活随笔
收集整理的這篇文章主要介紹了
设计模式的理解:享元模式 (Flyweight)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
享元模式 (Flyweight),是為了解決 使用大量細粒度對象時,代價過高性能變低的問題。
例如在編輯一個word文檔時每個字符都可以改變字體大小,字體類型,字體顏色。相應的,我們會為每個字符創(chuàng)建一個對象。那么如果要編輯1萬個文字的文本,就需要創(chuàng)建1萬個對象,由于創(chuàng)建如此多的對象就會給系統帶來較大的負荷。實際上,在這些編輯的這1萬個字符中,有很大一部分的字體大小,字體類型,字體顏色都是一樣的,即狀態(tài)是一樣的。享元模式的做法就是只為這些相同的“狀態(tài)”創(chuàng)建一個對象,如果需要這種狀態(tài)就將自己的引用指向該對象。實現共享。享元模式大部分通過緩存技術實現。
?
例如? 根據網站類型名稱來創(chuàng)建和共享對象。示例來自?https://www.cnblogs.com/adamjwh/p/9070107.html? 。?
//抽象的網站類 public abstract class WebSite { public abstract void use(); } //具體的網站類 public class ConcreteWebSite extends WebSite {private String name = "";public ConcreteWebSite(String name) {this.name = name;}@Overridepublic void use() {System.out.println("網站分類:" + name);}} //網站工廠類,用于創(chuàng)建具體的網站對象 public class WebSiteFactory {private HashMap<String, ConcreteWebSite> pool = new HashMap<>();//獲得網站分類public WebSite getWebSiteCategory(String key) {if(!pool.containsKey(key)) {pool.put(key, new ConcreteWebSite(key));}return (WebSite)pool.get(key);}//獲得網站分類總數public int getWebSiteCount() {return pool.size();}}//main 方法 public class Client {public static void main(String[] args) {WebSiteFactory factory = new WebSiteFactory();WebSite fx = factory.getWebSiteCategory("產品展示");fx.use();WebSite fy = factory.getWebSiteCategory("產品展示");fy.use();WebSite fz = factory.getWebSiteCategory("產品展示");fz.use();WebSite fa = factory.getWebSiteCategory("博客");fa.use();WebSite fb = factory.getWebSiteCategory("博客");fb.use();WebSite fc = factory.getWebSiteCategory("博客");fc.use();System.out.println("網站分類總數為:" + factory.getWebSiteCount()); //輸出為2}}?
總結
以上是生活随笔為你收集整理的设计模式的理解:享元模式 (Flyweight)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式的理解:单例模式(Singlet
- 下一篇: 设计模式的理解 : 门面模式、外观模式