flyweight模式 java代码_Java 实现享元(Flyweight)模式的示例代码分享

Java 实现享元(Flyweight)模式的示例代码分享

/**

* 字母

* @author stone

*

*/

public class Letter {

private String name;

public Letter(String name) {

this.name = name;

}

public String getName() {

return name;

}

}/**

* 一个产生字母对象的 享元工厂(单例工厂)

* @author stone

*

*/

public class LetterFactory {

private Map map;

private static LetterFactory instance = new LetterFactory();

private LetterFactory() {

map = new HashMap();

}

public static LetterFactory getInstance() {

return instance;

}

public void add(Letter letter) {

if (letter != null && !map.containsKey(letter.getName())) {

map.put(letter.getName(), letter);

}

System.out.println("map.size====" + map.size());

}

public Letter get(String name) {

return map.get(name);

}

}

/*

* 享元(Flyweight)模式结构型模式主要目的是实现对象的共享

* 字面上看就是 一个 共享元件的模式,这里是将 一些在系统中需要重复使用的对象,共享成单个元件

*

* 像JDBC数据库连接池、线程池等 都是应用了享元模式

* 数据库连接池: 创建了一定数量的连接,存入池中,用到时取出,释放时再存入

* 池程池:类似,也是 用到时取出,释放时再存入

* 所以一般 都会有一个集合来存储元件;有一个享元工厂进行元件的管理。

*/

public class Test {

public static void main(String[] args) {

LetterFactory factory = LetterFactory.getInstance();

String word = "easiness";

addLetterByName(factory, word);

getLetter(factory, word);

}

//添加字母对象

static void addLetterByName(LetterFactory factory, String word) {

for (char c : word.toCharArray()) {

factory.add(new Letter(c + ""));

}

}

//输出字母对象

static void getLetter(LetterFactory factory, String word) {

for (char c : word.toCharArray()) {

System.out.println(factory.get(c + ""));

}

}

}

打印map.size====1

map.size====2

map.size====2

map.size====3

map.size====4

map.size====5

map.size====5

flyweight.Letter@3343c8b3

flyweight.Letter@272d7a10

flyweight.Letter@3343c8b3

flyweight.Letter@1aa8c488

flyweight.Letter@3dfeca64

flyweight.Letter@22998b08

flyweight.Letter@1aa8c488

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值