1. 程式人生 > >【設計模式學習筆記】享元模式

【設計模式學習筆記】享元模式

享元模式:主要用於減少建立物件的數量,以減少記憶體佔用和提高效能。這種型別的設計模式屬於結構型模式,它提供了減少物件數量從而改善應用所需的物件結構的方式。【菜鳥】

文章目錄

這個模式也比較簡單。比如我們要生產相同型號,但塗裝不同的寶馬。我們生產了黑色寶馬後,還有必要再去例項化一個寶馬,再去設定它的型號嗎?我們是不是直接換一下顏色就可以了?
怎麼說呢,你可以理解為直接setColor就生產了另外一輛寶馬。

這裡我們為了好看,還是使用工廠去生產寶馬,同時呢引入一個map用於存放我們已經生產的不同型別的寶馬,當我們需要更換塗裝時,直接從map中取出對應的型號,塗一下就好了。

1.1 寶馬車長這樣

package flyweight;

/************************************************
 *@ClassName : BWMCar
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/15 0015 15:14】
 *@Version : 1.0.0
 *************************************************/
public class BWMCar { private String name; private String color; public BWMCar(String name, String color) { this.name = name; this.color = color; } }

1.2 工廠是這樣塗裝的

map就相當於是倉庫,當你發現有個對應的車型沒塗色,拉過來塗一下。好了~當你沒發現對應的車型,沒辦法,我們又不能凃空氣,只能新造一款車型。造好以後,這種車型以後也是直接塗一下完事。

package
flyweight; import java.util.HashMap; import java.util.Map; /************************************************ *@ClassName : CarFactory *@Description : TODO *@Author : NikolaZhang *@Date : 【2018/12/15 0015 15:16】 *@Version : 1.0.0 *************************************************/ public class CarFactory { private static Map<String, BWMCar> bwmCarMap = new HashMap<>(); public static BWMCar getInstance(String name, String color){ BWMCar bwmCar = bwmCarMap.get(name); if(bwmCar==null){ bwmCar = new BWMCar(name, color); bwmCarMap.put(name, bwmCar); } return bwmCar; } }

1.3 塗塗塗

package flyweight;

/************************************************
 *@ClassName : Test
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/15 0015 14:40】
 *@Version : 1.0.0
 *************************************************/

public class Test {
    public static void main(String[] args) {
        System.out.println(CarFactory.getInstance("bwm1","black"));
        System.out.println(CarFactory.getInstance("bwm1","grey"));
        System.out.println(CarFactory.getInstance("bwm2","grey"));
        System.out.println(CarFactory.getInstance("bwm1","blue"));
    }
}

1.4 結果

在這裡插入圖片描述

可以看到bwm1型別的車都是一個地址,這就是減少建立物件的數量,以減少記憶體佔用和提高效能

參考

【菜鳥教程】:http://www.runoob.com/design-pattern/flyweight-pattern.html