享元模式
1、什么是享元模式2、享元模式的结构3、享元模式的角色和职责4、代码实现
1、什么是享元模式
Flyweight模式也叫享元模式,是构造型模式之一,它通过与其他类似对象共享数据来减小内存占用。
2、享元模式的结构
3、享元模式的角色和职责
抽象享元角色:
所有具体享元类的父类,规定一些需要实现的公共接口。 具体享元角色:
抽象享元角色的具体实现类,并实现了抽象享元角色规定的方法。 享元工厂角色:
负责创建和管理享元角色。
4、代码实现
package com.example.demo02;
public class Person {
private String name;
private String sex;
private int age;
public Person(String name, String sex, int age) {
super();
this.name = name;
this.sex = sex;
this.age = age;
}
public Person() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package com.example.demo02;
public class Teacher extends Person {
private String number;
public Teacher(String name, String sex, int age, String number) {
super(name, sex, age);
this.number = number;
}
public Teacher() {
super();
}
public Teacher(String name, String sex, int age) {
super(name, sex, age);
// TODO Auto-generated constructor stub
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}
package com.example.demo02;
import java.util.HashMap;
import java.util.Map;
public class TeacherFactory {
private Map<String, Teacher> pool;
public TeacherFactory(){
pool = new HashMap<String, Teacher>();
}
public Teacher getTeacher(String number){
Teacher teacher = pool.get(number);
if (teacher == null) {
teacher = new Teacher();
teacher.setNumber(number);
pool.put(number, teacher);
}
return teacher;
}
}
package com.example.demo02;
import org.junit.Test;
public class MainClass {
@Test
public void test01(){
TeacherFactory factory = new TeacherFactory();
Teacher teacher01 = factory.getTeacher("0101");
Teacher teacher02 = factory.getTeacher("0102");
Teacher teacher03 = factory.getTeacher("0103");
Teacher teacher04 = factory.getTeacher("0101");
System.out.println(teacher01.getNumber());
System.out.println(teacher02.getNumber());
System.out.println(teacher03.getNumber());
System.out.println(teacher04.getNumber());
if (teacher01 == teacher04) {
System.out.println("true");
}else {
System.out.println("false");
}
}
}