系统中存在多个相同的对象,那么只需要共享一份对象的拷贝,而不必为每一次使用都创建新的对象。目的是提高系统性能
和单例模式区别:
1.单例模式一个类一个对象,享元模式可以有很多个
2.享元模式为了提升性能节约内存,单例模式为了共享状态
实例:
第一步:写一个女生类(享元对象)
public class Girl {
private String name;
public Girl(String name) {
this.name = name;
}
}
第二步:班级类
public class Class {
private volatile static Class aClass; //私有化声明
private Class() {} //无参构造方法
private Map<String, Girl> peoples = new HashMap<>(); //私有一个Map
public static Class GetInstance(){ //单例模式
if (aClass ==null){
synchronized (Class.class){
aClass = new Class();
}
}
return aClass;
}
public int Howmany(){ //班里女生人数
return peoples.size();
}
public void look(String s) { //如果女生不在班里,就带进来
if (peoples.containsKey(s)) {}
else {peoples.put(s, new Girl(s));}
}
}
第三步:男生类
public class Boy {
public ArrayList<Girl> knowGirl = new ArrayList<>();
public void know(String s) {
knowGirl.add(new Girl(s));
Class.GetInstance().look(s);
}
}
第四步:测试类
public static void main(String[] args) {
Class aClass = Class.GetInstance();
Boy boy1=new Boy();
Boy boy2=new Boy();
Boy boy3=new Boy();
boy1.know("小红");
boy1.know("小张");
boy1.know("小李");
boy2.know("小红");
boy3.know("小红");
boy3.know("小白");
System.out.println("班里现在有"+aClass.jisuan()+"位女同学:");
}
结果: