什么是享元模式
Flyweight模式也叫享元模式,是构造型模式之一,它通过与其他类似对象共享数据来减小内存占用。
实现步骤
- 创建一个实体类,
public class MyCharacter {
private char mychar;
public MyCharacter(char mychar) {
this.mychar = mychar;
}
public void display() {
System.out.println(mychar);
}
}
- 创建一个工厂,生成基于给定信息的实体类的对象。
public class MyCharacterFactory {
private Map<Character,MyCharacter> pool;
public MyCharacterFactory() {
pool = new HashMap<Character,MyCharacter>();
}
public MyCharacter getMyCharacter(Character character) {
MyCharacter myChar = pool.get(character);
if(myChar == null) {
myChar = new MyCharacter(character);
pool.put(character, myChar);
}
return myChar;
}
}
- 之前我们创建对象是直接new一个,如:
MyCharacter myChar1 = new MyCharacter('a');
MyCharacter myChar2 = new MyCharacter('b');
MyCharacter myChar3 = new MyCharacter('a');
MyCharacter myChar4 = new MyCharacter('d');
- 但是我们发现1和3的数据一样,所以我们可以用享元模式模式,从工厂中获取对象,工厂会根据对象数据判断是否有相同数据的对象,如果有直接返回,没有再创建
public class MainClass {
public static void main(String[] args) {
MyCharacterFactory factory = new MyCharacterFactory();
MyCharacter myChar1 = factory.getMyCharacter('a');
MyCharacter myChar2 = factory.getMyCharacter('b');
MyCharacter myChar3 = factory.getMyCharacter('a');
MyCharacter myChar4 = factory.getMyCharacter('d');
myChar1.display();
myChar2.display();
myChar3.display();
myChar4.display();
if(myChar1 == myChar3) {
System.out.println("true");
} else {
System.out.println("false");
}
}
}