在软件开发的世界里,设计模式如同一本精妙的编码诗集,已经成为一种标准的编程实践。在Java编程中,设计模式很重要。是软件开发中广泛应用的一种编程方法,它可以帮助开发人员更快地编写出高效、可靠和可维护的代码。本人将制作一个关于Java设计模式的系列文章,总共23种设计模式将以一篇一篇文章讲解,代码笔记已开源:Gitee点击跳转。在上一篇《Java设计模式(8)外观模式》文章中,我们介绍了外观模式。本文是这个系列的第九篇章,我们将讲解一下享元模式的实现方式、应用场景以及它的用途。
享元模式是一种结构型设计模式,是通过共享对象来减少内存使用和提高性能。在该模式中,对象分为内部状态和外部状态,其中内部状态是可共享的,而外部状态是不可共享的。通过共享内部状态,可以减少系统中重复对象的数量,从而减少内存消耗。
使用享元模式实现内外部状态描述;定义一个Flyweight接口
/**
* 享元接口
* @author Jensen
* @date 2024-02-28
* */
public interface Flyweight {
void operation(String state);
}
创建 FlyweightImpl类 并实现状态的具体操作
public class FlyweightImpl implements Flyweight {
private final String innerState;
public FlyweightImpl(String innerState) {
this.innerState = innerState;
}
@Override
public void operation(String state) {
System.out.println("外部状态是:"+state+","+"内部状态是:"+innerState);
}
}
随后创建享元工厂类 FlyweightFactory 它负责管理 Flyweight 对象的创建和共享。
/**
* 享元工厂
* @author Jensen
* @date 2024-02-28
* */
public class FlyweightFactory {
private final Map<String,Flyweight> flyweightMap = new HashMap<>();
public Flyweight getFlyweight(String k){
return flyweightMap.computeIfAbsent(k, FlyweightImpl::new);
}
}
System.out.println("------------------------------享元模式-----------------------------");
FlyweightFactory flyweightFactory = new FlyweightFactory();
Flyweight anxiety = flyweightFactory.getFlyweight("焦虑");
anxiety.operation("平淡");
anxiety.operation("开朗");
这里就简单的实现内部状态是可共享的,而外部状态是不可共享的;外部状态不管怎么变,其内部状态仍然是“焦虑”的。
其实享元模式还有很多其他的应用场景,比如: