设计模式之--享元模式
作者:互联网
设计模式之–享元模式
简介:
本篇文章是介绍 23 中设计模式中的结构型设计模式中的
享元模式
.使用的是 Java 代码.
目录:
1.什么是享元模式
定义:
享元模式是池技术的重要是实现方式, 它可以减少应用程序创建的对象, 降低程序内存的占用, 提高程序性能.
使用共享对象有效的支持大量
细粒度
的对象
细粒度对象分为两个部分.
- 内部状态:
内部状态是对象可共享出来的信息, 存储在享元对象内部且不会随着环境的改变而改变.
(我的理解: 是享元对象的用于区分细粒度的内部逻辑部分)
- 外部状态:
是对象依赖的一个标记, 它是随环境改变而改变的, 并且不可共享的状态.
(我的理解: 是一个用于区分是否创建新享元对象的标记)
结构:
- Flyweight(抽象享元角色)
同时定义出对象的外部状态和内部状态的接口或者实现.
- ConcreteFlyweight(具体享元角色)
实现抽象享元角色定义的业务.
- FlyweightFactory(享元工厂)
负责管理对象池和创建享元对象.
2.享元模式的使用场景和优点
使用场景:
- 系统中存在大量的相似对象.
- 需要缓冲池的场景
3.享元模式的简单运用
抽象享元角色
public abstract class Flyweight {
//内部状态
public String intrinsic;
//外部状态
protected final String extrinsic;
//要求享元角色必须接受外部状态
public Flyweight(String extrinsic) {
this.extrinsic = extrinsic;
}
//定义业务操作
public abstract void operate(int extrinsic);
public String getIntrinsic() {
return intrinsic;
}
public void setIntrinsic(String intrinsic) {
this.intrinsic = intrinsic;
}
}
具体享元角色
public class ConcreteFlyweight extends Flyweight {
//接受外部状态
public ConcreteFlyweight(String extrinsic) {
super(extrinsic);
}
//根据外部状态进行逻辑处理
@Override
public void operate(int extrinsic) {
System.out.println("具体Flyweight:" + extrinsic);
}
}
享元工厂
public class FlyweightFactory {
//定义一个池容器
private static HashMap<String, Flyweight> pool = new HashMap<>();
//享元工厂
public static Flyweight getFlyweight(String extrinsic) {
Flyweight flyweight = null;
if(pool.containsKey(extrinsic)) { //池中有该对象
flyweight = pool.get(extrinsic);
System.out.print("已有 " + extrinsic + " 直接从池中取---->");
} else {
//根据外部状态创建享元对象
flyweight = new ConcreteFlyweight(extrinsic);
//放入池中
pool.put(extrinsic, flyweight);
System.out.print("创建 " + extrinsic + " 并从池中取出---->");
}
return flyweight;
}
}
客户端调用
public class Client {
public static void main(String[] args) {
int extrinsic = 22;
Flyweight flyweightX = FlyweightFactory.getFlyweight("X");
flyweightX.operate(++ extrinsic);
Flyweight flyweightY = FlyweightFactory.getFlyweight("Y");
flyweightY.operate(++ extrinsic);
Flyweight flyweightZ = FlyweightFactory.getFlyweight("Z");
flyweightZ.operate(++ extrinsic);
Flyweight flyweightReX = FlyweightFactory.getFlyweight("X");
flyweightReX.operate(++ extrinsic);
Flyweight unsharedFlyweight = new UnsharedConcreteFlyweight("X");
unsharedFlyweight.operate(++ extrinsic);
}
}
标签:享元,String,对象,extrinsic,模式,Flyweight,设计模式,public 来源: https://blog.csdn.net/sinat_34394641/article/details/89072030