Flyweight
构造型模式之一
通过与其他类似对象共享数据来减小内存占用
角色和职责
1.抽象享元角色
所有具体享元类的父类,规定一些需要实现的公共接口。
2.具体享元角色
抽象享元角色的的具体实现类,并实现了抽象享元角色规定的方法。
3.享元工厂角色
负责创建和管理享元角色
抽象享元角色
public class Person {
private String name;
private int age;
private String sex;
public Person(){
}
public Person(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
具体享元角色
public class Teacher extends Person{
private String number;
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public Teacher(String name, int age, String sex, String number) {
super(name, age, sex);
this.number = number;
}
public Teacher(){
}
}
享元工厂角色
import java.util.*;
public class TeacherFactory {
private Map<String,Teacher> pool;
public TeacherFactory(){
pool = new HashMap<>();
}
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;
}
}
public class MainClass {
public static void main(String[] args) {
TeacherFactory teacherFactory = new TeacherFactory();
Teacher teacher1 = teacherFactory.getTeacher("0101");
Teacher teacher2 = teacherFactory.getTeacher("0102");
Teacher teacher3 = teacherFactory.getTeacher("0103");
Teacher teacher4 = teacherFactory.getTeacher("0102");
System.out.println(teacher1.getNumber());
System.out.println(teacher2.getNumber());
System.out.println(teacher3.getNumber());
System.out.println(teacher4.getNumber());
System.out.println(teacher2==teacher4);
}
}