java設計模式之享元模式Flyweight
阿新 • • 發佈:2019-02-13
package com.javapatterns.flyweight.simple; public class Client { private static FlyweightFactory factory; static public void main(String[] args) { factory = new FlyweightFactory(); Flyweight fly = factory.factory(new Character('a')); fly.operation("First Call"); fly = factory.factory(new Character('b')); fly.operation("Second Call"); fly = factory.factory(new Character('a')); fly.operation("Third Call"); factory.checkFlyweight(); } } package com.javapatterns.flyweight.simple; import java.util.Map; import java.util.HashMap; import java.util.Iterator; public class FlyweightFactory { private HashMap flies = new HashMap(); private Flyweight lnkFlyweight; public FlyweightFactory(){} public synchronized Flyweight factory(Character state) { if ( flies.containsKey( state ) ) { return (Flyweight) flies.get( state ); } else { Flyweight fly = new ConcreteFlyweight( state ); flies.put( state , fly); return fly; } } public void checkFlyweight() { Flyweight fly ; int i = 0; System.out.println("\n==========checkFlyweight()============="); for ( Iterator it = flies.entrySet().iterator() ; it.hasNext() ; ) { Map.Entry e = (Map.Entry) it.next(); System.out.println("Item " + (++i) + " : " + e.getKey()); } System.out.println("==========checkFlyweight()============="); } } package com.javapatterns.flyweight.simple; public class ConcreteFlyweight extends Flyweight { private Character intrinsicState = null; public ConcreteFlyweight(Character state) { this.intrinsicState = state; } public void operation(String state) { System.out.print( "\nIntrinsic State = " + intrinsicState + ", Extrinsic State = " + state); } } package com.javapatterns.flyweight.simple; abstract public class Flyweight { abstract public void operation(String state); }
複合享元模式:
從圖上理解是比較容易的,但書中的程式碼著實讓人暈的很,索性先跳過。