十一、享元模式

    xiaoxiao2022-07-15  148

    享元模式

    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"); } } }
    最新回复(0)