added flyweight example
This commit is contained in:
parent
dfd4dba1d7
commit
f37a8cd665
15
src/learn/simple_flyweight/ConcreteFlyweight.java
Normal file
15
src/learn/simple_flyweight/ConcreteFlyweight.java
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package learn.simple_flyweight;
|
||||||
|
|
||||||
|
public class ConcreteFlyweight extends Flyweight {
|
||||||
|
private long intrinsicState;
|
||||||
|
|
||||||
|
public ConcreteFlyweight(long intrinsicState) {
|
||||||
|
super();
|
||||||
|
this.intrinsicState = intrinsicState;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void operation(long extrinsicState) {
|
||||||
|
System.out.println("Flyweight " + intrinsicState + " calling operation with extrinsic state " + extrinsicState);
|
||||||
|
}
|
||||||
|
}
|
13
src/learn/simple_flyweight/Flyweight.java
Normal file
13
src/learn/simple_flyweight/Flyweight.java
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
package learn.simple_flyweight;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public abstract class Flyweight {
|
||||||
|
private long[] internalStorage = new long[1000000];
|
||||||
|
|
||||||
|
public Flyweight() {
|
||||||
|
Arrays.fill(internalStorage, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract void operation(long extrinsicState);
|
||||||
|
}
|
17
src/learn/simple_flyweight/FlyweightFactory.java
Normal file
17
src/learn/simple_flyweight/FlyweightFactory.java
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
package learn.simple_flyweight;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class FlyweightFactory {
|
||||||
|
private static final Map<Integer, Flyweight> flyweights = new HashMap<>();
|
||||||
|
|
||||||
|
public Flyweight getFlyweight(Integer key) {
|
||||||
|
Flyweight flyweight = flyweights.get(key);
|
||||||
|
if (flyweight == null) {
|
||||||
|
flyweight = new ConcreteFlyweight(key);
|
||||||
|
flyweights.put(key, flyweight);
|
||||||
|
}
|
||||||
|
return flyweight;
|
||||||
|
}
|
||||||
|
}
|
40
src/learn/simple_flyweight/Main.java
Normal file
40
src/learn/simple_flyweight/Main.java
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
package learn.simple_flyweight;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
public class Main {
|
||||||
|
private static final Random rand = new Random();
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
int rounds = 100;
|
||||||
|
|
||||||
|
debugMemory();
|
||||||
|
testFlyweight(rounds);
|
||||||
|
debugMemory();
|
||||||
|
testUnsharedFlyweight(rounds);
|
||||||
|
debugMemory();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void debugMemory() {
|
||||||
|
long totalMemory = Runtime.getRuntime().totalMemory();
|
||||||
|
long freeMemory = Runtime.getRuntime().freeMemory();
|
||||||
|
long usedMemory = totalMemory - freeMemory;
|
||||||
|
System.out.printf("Memory: %d%n", usedMemory);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void testFlyweight(int rounds) {
|
||||||
|
FlyweightFactory factory = new FlyweightFactory();
|
||||||
|
|
||||||
|
for (int i = 0; i < rounds; i++) {
|
||||||
|
Flyweight flyweight = factory.getFlyweight(rand.nextInt(10));
|
||||||
|
flyweight.operation(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void testUnsharedFlyweight(int rounds) {
|
||||||
|
for (int i = 0; i < rounds; i++) {
|
||||||
|
Flyweight flyweight = new UnsharedConcreteFlyweight(rand.nextInt(10));
|
||||||
|
flyweight.operation(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
15
src/learn/simple_flyweight/UnsharedConcreteFlyweight.java
Normal file
15
src/learn/simple_flyweight/UnsharedConcreteFlyweight.java
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package learn.simple_flyweight;
|
||||||
|
|
||||||
|
public class UnsharedConcreteFlyweight extends Flyweight {
|
||||||
|
private long allState;
|
||||||
|
|
||||||
|
public UnsharedConcreteFlyweight(long allState) {
|
||||||
|
super();
|
||||||
|
this.allState = allState;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void operation(long extrinsicState) {
|
||||||
|
System.out.println("Unshared Flyweight " + allState + " calling operation with extrinsic state " + extrinsicState);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user