介绍
享元模式(Flyweight Pattern)属于结构型模式。尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。主要用于减少创建对象的数量,以减少内存占用和提高性能。
优点
- 大大减少对象的创建,降低系统的内存,使效率提高
缺点
- 提高了系统的复杂度,需要分离出对象之间的异同,而且相同属性一旦变化,就会变得混乱
应用
系统有大量相似对象时
实现
关键代码:用hashmap存储,减少创建对象消耗资源
import java.util.HashMap;
interface Career {
void introduce();
}
class Hero implements Career {
private String name;
private String career;
public Hero(String career){
this.career = career;
}
public void setName(String name) {
this.name = name;
}
@Override
public void introduce() {
System.out.println("I am "+career+",named "+name);
}
}
class HeroFactory {
private static final HashMap<String, Hero> Map = new HashMap<>();
public static Hero getHero(String career) {
Hero hero = (Hero)Map.get(career);
if(hero == null) {
hero = new Hero(career);
Map.put(career, hero);
System.out.println("Creating new career of hero : " + career);
}
return hero;
}
}
class Demo {
public static void main(String[] args) {
String[] careerList = {"assassin","warrior","assassin"};
String[] heroList = {"Jack","Marry","Tom"};
for (int i = 0; i < heroList.length; i++) {
Hero hero = HeroFactory.getHero(careerList[i]);
hero.setName(heroList[i]);
hero.introduce();
}
}
}
运行结果:
Creating new career of hero : assassin
I am assassin,named Jack
Creating new career of hero : warrior
I am warrior,named Marry
I am assassin,named Tom