1. 程式人生 > >設計模式之享元模式(Flyweight Pattern)

設計模式之享元模式(Flyweight Pattern)

目的:主要用於減少建立物件的數量,以減少記憶體佔用和提高效能。
應用例項: 1、JAVA 中的 String,如果有則返回,如果沒有則建立一個字串儲存在字串快取池裡面。 2、資料庫的資料池。
程式碼:
畫圖形的 介面,描述畫這個動作:

public interface Shape {
    void draw();
}

一個畫圓的實現類:

public class Circle implements Shape{

    private String color;
    
    public Circle(String color) {
        super();
        this.color = color;
    }

    @Override
    public void draw() {
        System.out.println("畫一個"+color+"顏色的圓");
    }

}

建立物件的工廠:

public class ShapeFactory {
    private static final HashMap<String, Shape> map=new HashMap<>();
    
    public static Shape getShape(String color) {
        Shape circle=map.get(color);
        if(circle==null) {//here. if null,create.
            circle=new Circle(color);
            map.put(color, circle);
            System.out.println("生成一個"+color+"色的圓");
        }
        return circle;
    }
}

應用:

public class Test {
    public static void main(String[] args) {
        Shape circle=ShapeFactory.getShape("red");
        circle.draw();
        Shape circle1=ShapeFactory.getShape("green");
        circle1.draw();
        Shape circle2=ShapeFactory.getShape("red");
        circle2.draw();
    }
}

結果:

生成一個red色的圓
畫一個red顏色的圓
生成一個green色的圓
畫一個green顏色的圓
畫一個red顏色的圓

結論:
可以看到,第一次都是生成物件,red圓第二次來就沒有生成新物件,直接拿,然後用。

轉載於:
http://www.runoob.com/design-pattern/flyweight-pattern.html