享元模式(Flyweight)

享元模式git

一. 享元模式

1.1 定義

  • 運用共享技術有效的支持大量細粒度的對象.

二. 具體實現

2.1 建立對象接口

public interface IFlyweight {
        void print();
    }

2.2 建立具體對象

public class Flyweight implements IFlyweight {
        private String id;
        public Flyweight(String id){
            this.id = id;
        }
        @Override
        public void print() {
            System.out.println("Flyweight.id = " + getId() + " ...");
        }
        public String getId() {
            return id;
        }
    }

2.3 建立工廠

public class FlyweightFactory {
        private Map<String, IFlyweight> flyweightMap = new HashMap();
        public IFlyweight getFlyweight(String str){
            IFlyweight flyweight = flyweightMap.get(str);
            if(flyweight == null){
                flyweight = new Flyweight(str);
                flyweightMap.put(str, flyweight);
            }
            return  flyweight;
        }
        public int getFlyweightMapSize(){
            return flyweightMap.size();
        }
    }

2.4 調用

public static void main(String[] args) {
        FlyweightFactory flyweightFactory = new FlyweightFactory();
        IFlyweight flyweight1 = flyweightFactory.getFlyweight("A");
        IFlyweight flyweight2 = flyweightFactory.getFlyweight("B");
        IFlyweight flyweight3 = flyweightFactory.getFlyweight("A");
        flyweight1.print();
        flyweight2.print();
        flyweight3.print();
        System.out.println(flyweightFactory.getFlyweightMapSize());
    }

2.5 輸出

Flyweight.id = A ...
    Flyweight.id = B ...
    Flyweight.id = A ...
    2

三. 優缺點

3.1 優勢

  • 減小對象的建立,節省內存.

3.2 缺點

  • 提高了系統的複雜性.

四. 源碼

https://github.com/Seasons20/DisignPattern.git

ENDgithub

相關文章
相關標籤/搜索