設計模式之享元模式(Flyweight Pattern)
阿新 • • 發佈:2018-11-29
目的:主要用於減少建立物件的數量,以減少記憶體佔用和提高效能。
應用例項: 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