安卓怎么安装365BET-h365官方登录平台-365batapp

简约 · 精致 · 专注内容

Java编程揭秘:如何运用Flyweight模式优化对象重用与性能提升

Java编程揭秘:如何运用Flyweight模式优化对象重用与性能提升

意图

Flyweight模式的主要目的是通过共享对象来有效地支持大量细粒度的对象。这种模式可以减少内存的使用,提高系统的性能,尤其是在系统中存在大量相似对象时。

主要解决

当系统中存在大量相似的对象时,如果每个对象都独立创建,会导致内存占用过大,甚至可能引起内存溢出。Flyweight模式通过将对象划分为内部状态和外部状态,从而实现对象的共享,减少内存消耗。

何时使用

系统中有大量对象;

这些对象消耗大量内存;

这些对象的状态大部分可以外部化;

这些对象可以按照内蕴状态分为很多组,当把外蕴对象从对象中剔除出来时,每一组对象都可以用一个对象来代替;

系统不依赖于这些对象身份,这些对象是不可分辨的。

如何解决

将对象的状态划分为内部状态和外部状态;

内部状态存储在享元对象内部,可以被多个享元对象共享;

外部状态存储在客户端,根据具体实例进行设置;

使用享元工厂来创建和管理享元对象。

关键代码

import java.util.HashMap;

import java.util.Map;

// 定义享元接口

interface Flyweight {

void operation(String extrinsicState);

}

// 实现享元类

class ConcreteFlyweight implements Flyweight {

private String intrinsicState;

public ConcreteFlyweight(String intrinsicState) {

this.intrinsicState = intrinsicState;

}

public void operation(String extrinsicState) {

System.out.println("Intrinsic state: " + intrinsicState + ", Extrinsic state: " + extrinsicState);

}

}

// 享元工厂类

class FlyweightFactory {

private Map flyweightMap = new HashMap<>();

public Flyweight getFlyweight(String key) {

Flyweight flyweight = flyweightMap.get(key);

if (flyweight == null) {

flyweight = new ConcreteFlyweight(key);

flyweightMap.put(key, flyweight);

}

return flyweight;

}

}

// 客户端类

public class FlyweightPatternDemo {

public static void main(String[] args) {

FlyweightFactory factory = new FlyweightFactory();

Flyweight flyweight1 = factory.getFlyweight("a");

Flyweight flyweight2 = factory.getFlyweight("a");

Flyweight flyweight3 = factory.getFlyweight("b");

flyweight1.operation("External State 1");

flyweight2.operation("External State 2");

flyweight3.operation("External State 3");

}

}

应用实例

Java中的String:如果有相同的字符串,则返回,如果没有,则创建一个字符串保存在字符串缓存池里面;

数据库的数据池:数据库连接池,其中连接的URL、驱动、用户名、密码等信息是共享的,而具体的连接则是根据需要动态创建的;

文本编辑器:字符对象是享元对象,而字符的样式(如字体、颜色等)是外部状态。

优点

大大减少对象的创建,降低系统的内存,使效率提高;

适合大量细粒度对象的系统。

缺点

提高了系统的复杂度,需要分离出外部状态和内部状态;

客户端需要负责外部状态的传递,可能会引入一些复杂度。

相关推荐

360°全景图制作步骤和技巧有哪些?
公司邮箱怎么登陆

公司邮箱怎么登陆

安卓怎么安装365BET 08-14
3年赚4个亿?杨幂呼吁抵制天价片酬遭质疑,身价被扒了……
闹钟app哪个好用

闹钟app哪个好用

安卓怎么安装365BET 08-14
僵尸警戒Zombie Watch小技巧攻略

僵尸警戒Zombie Watch小技巧攻略

安卓怎么安装365BET 07-28
足球比賽規則

足球比賽規則

安卓怎么安装365BET 07-05