JAVA设计模式——(五)享元模式(Flyweight Pattern)

发布于:2025-05-01 ⋅ 阅读:(18) ⋅ 点赞:(0)

JAVA设计模式——(五)享元模式(Flyweight Pattern)

概念

使共享对象可以有效的支持大量的细粒度对象。主要采用池技术实现。

理解

享元模式主要解决大量对象的共享,实现内部对象的状态一致性,和外部状态对内部状态的使用。简单理解就是,在JAVA的基础数据类型中,String、Integer、Character等类型均会在创建时缓存一定范围的数据,较少创建和销毁对象花费的时间。

所以,该模式主要涉及以下部分:内部状态、外部状态、外部状态转换为内部状态的工厂、利用外部状态的客户端。

实现

创建内部状态

定义团队抽象类:

package cn.sh.designepattern;

/** 定义团队抽象类
 * @Author song
 * @Version 0.0.1
 * @Date 2025/4/24 14:23
 * @Contact 643947568@qq.com
 */
public abstract class Team {

   String name;
   String type;

   public Team(String name, String type) {
      this.name = name;
      this.type = type;
   }


    public abstract void attendCompetition();
}

定义内部状态具体实现:

package cn.sh.designepattern;

/**
 * @Author song
 * @Version 0.0.1
 * @Date 2025/4/24 14:26
 * @Contact 643947568@qq.com
 */
public class BasketballTeam extends Team{

    public BasketballTeam(String name, String type) {
        super(name, type);
    }

    @Override
    public void attendCompetition() {
        System.out.println("篮球队参赛");
    }
}

package cn.sh.designepattern;

/**
 * @Author song
 * @Version 0.0.1
 * @Date 2025/4/24 14:26
 * @Contact 643947568@qq.com
 */
public class FootballTeam extends Team{

    public FootballTeam(String name, String type) {
        super(name, type);
    }

    @Override
    public void attendCompetition() {
        System.out.println("足球队参数");
    }
}

定义享元工厂

package cn.sh.designepattern;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author song
 * @Version 0.0.1
 * @Date 2025/4/24 14:29
 * @Contact 643947568@qq.com
 */
public class TeamFactory {

    private Map<String, Team> map = new HashMap<>();

    public void putTeam(Team team) {
        if (!map.containsKey(team.name)) {
            map.put(team.name, team);
        }
    }

    public Team getTeam(String name) {
        return map.get(name);
    }

}

测试

package cn.sh.designepattern;

/**
 * @Author song
 * @Version 0.0.1
 * @Date 2025/4/24 10:47
 * @Contact 643947568@qq.com
 */
public class Main {
    public static void main(String[] args) {
        Team footballTeam = new FootballTeam("足球队", "足球队");
        Team basketballTeam = new BasketballTeam("篮球队", "篮球队");

        TeamFactory teamFactory = new TeamFactory();
        teamFactory.putTeam(footballTeam);
        teamFactory.putTeam(basketballTeam);

        teamFactory.getTeam("足球队").attendCompetition();
        teamFactory.getTeam("篮球队").attendCompetition();
    }
}

适用性

享元模式可以通过缓存常用的对象在内存中,以节省对象的创建和销毁的时间,从而提高系统的加载速度。

不过缓存太多的对象会导致内存的大量占用,还需要视实际情况而定。


网站公告

今日签到

点亮在社区的每一天
去签到