设计模式14——Flyweight设计模式

本文介绍了享元设计模式的基本概念及应用案例,该模式通过共享相同内容的小类来减少对象实例的数量,从而节省内存资源。文章详细解释了内部状态与外部状态的概念,并给出了书和作者类的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Flyweight享元设计模式是为了避免大量拥有相同内容的小类重复创建,而使大家共享一个类的模式。Flyweight享元设计模式实质是运用一个简单工厂方法模式,外加一个单类模式实现细粒度原件的共享。享元模式结构如下:

Flyweight享元设计模式有两个重要概念:

以文字处理软件中对象为例

内部状态intrinsic:可以共享的对象,如相同的字。

外部状态extrinsic:不能共享的对象,如每个字的位置,大小等等。

Flyweight享元设计模式使用对象池存放内部对象,当需要内部对象时首先判断对象池中是否存在,如果存在直接返回,如果不存在创建一个对象放入对象池中返回。

书有书名,作者和价格三个常用的属性,其中作者有可能是同一个人,使用Flyweight享元设计模式的例子代码如下:
class Book{
    private String title;
    private float price;
    private Author author;

    public String getTitle(){
        return title;
    }
    public float getPrice(){
        return price;
    }
    public Author getAuthor(){
        return author;	
    }
}


//将Author作者类设计为可共享的享元
class Author{
    //内部状态
    private String name;

    public String getName(){
        return name;
    }

    public Author(String name){
        this.name = name;
    }
}


//享元工厂
public class AuthorFactory{
    private static Map<String, Author> authors = new HashMap<String, Author>();

    public static Author getAuthor(String name){
        Author author = authors.get(name);
        if(author == null){
            author = new Author(name);
            authors.put(name, author);
        }
        return author;
    }
}

Flyweight享元设计模式非常适合文字处理软件,因为像文字这种小对象重用的可能性很高,如果不共享对象,就会生成数量巨大的小对象消耗内存,享元模式则可以使重复概率高的对象重用,大大提高程序效率和性能。

享元模式特点:

享元模式基本是单例模式+简单工厂模式。
减少运行时对象实例的个数,节省内存。

 

JDK中享元模式的应用:

java.lang.Integer#valueOf(int)
java.lang.Boolean#valueOf(boolean)
java.lang.Byte#valueOf(byte)
java.lang.Character#valueOf(char)
String常量池

转载于:https://my.oschina.net/hongdengyan/blog/187479

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值