- 属于结构型设计模式
- 优点:外部状态(不可共享)相对独立,使得对象可以适应不同的外部环境,可共享相同的对象,减少内存消耗
- 缺点:外部状态由客户端保存,要求内外部状态分离,使得程序的逻辑复杂化
- 与单例模式区别是,系统中存在多个相同的对象,�共享一个对象的拷贝,可看作单例模式的扩展
- 享元模式应用在数据库连接池
public interface Person {
void introduce(String info);
}
public class PersonImpl implements Person {
private String name;
public PersonImpl(String name) {
this.name = name;
}
@Override
public void introduce(String info) {
System.out.println("inner parameter:" + this.name);
System.out.println("outer parameter:" + info);
}
}
public class FlyWeightFactory {
private Map<String, Person> map = new HashMap<>();
// 获取指定对象
public Person getPerson(String name) {
Person person = map.get(name);
if (person == null) {
person = new PersonImpl(name);
map.put(name, person);
}
return person;
}
// 获取当前对象数量
public int getCount() {
return map.size();
}
}
public class Main {
public static void main(String[] args) {
FlyWeightFactory factory = new FlyWeightFactory();
Person person = factory.getPerson("stalary");
person.introduce("第一次获取");
person = factory.getPerson("hawk");
person.introduce("第二次获取");
person = factory.getPerson("stalary");
person.introduce("第三次获取");
System.out.println("当前对象数量:" + factory.getCount());
}
}
// 测试结果
inner parameter:stalary
outer parameter:第一次获取
inner parameter:hawk
outer parameter:第二次获取
inner parameter:stalary
outer parameter:第三次获取
当前对象数量:2