编程自学指南:java程序设计开发,设计思想开源框架-结构型模式之享元模式,运用共享技术支持大量细粒度对象,减少内存使用,提高性能

java程序设计开发,设计思想开源框架-结构型模式之享元模式,运用共享技术支持大量细粒度对象,减少内存使用,提高性能

享元模式概述

定义

享元模式(Flyweight Pattern)是一种结构型设计模式,它通过共享对象来减少内存使用和提高性能。该模式旨在运用共享技术有效地支持大量细粒度的对象,将对象的状态分为内部状态和外部状态。内部状态是对象可共享的部分,存储在享元对象内部,不随环境变化;外部状态则依赖于使用场景,会根据环境变化而改变,由客户端保存并在需要时传递给享元对象。

核心角色
  • 抽象享元角色(Flyweight):定义了享元对象的接口,声明了享元对象的操作方法,规定了内部状态和外部状态的使用方式。
  • 具体享元角色(Concrete Flyweight):实现了抽象享元接口,负责存储内部状态,并根据客户端传入的外部状态进行相应操作。
  • 享元工厂角色(Flyweight Factory):负责创建和管理享元对象。它维护一个享元对象池,当客户端请求享元对象时,先检查池中是否已存在符合要求的对象,若存在则直接返回,若不存在则创建新对象并放入池中。
  • 客户端角色(Client):创建和管理外部状态,向享元工厂请求享元对象,并将外部状态传递给享元对象进行操作。

实际应用案例:围棋游戏

以下是一个简单的 Java 代码示例,模拟围棋游戏中棋子的共享:

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

// 抽象享元角色:棋子
interface ChessPiece {
    void place(int x, int y);
}

// 具体享元角色:黑子
class BlackChessPiece implements ChessPiece {
    @Override
    public void place(int x, int y) {
        System.out.println("在位置 (" + x + ", " + y + ") 放置黑子");
    }
}

// 具体享元角色:白子
class WhiteChessPiece implements ChessPiece {
    @Override
    public void place(int x, int y) {
        System.out.println("在位置 (" + x + ", " + y + ") 放置白子");
    }
}

// 享元工厂角色:棋子工厂
class ChessPieceFactory {
    private static final Map<String, ChessPiece> pieces = new HashMap<>();

    public static ChessPiece getChessPiece(String color) {
        ChessPiece piece = pieces.get(color);
        if (piece == null) {
            if ("black".equalsIgnoreCase(color)) {
                piece = n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zl515035644

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值