享元模式

本文介绍了一种设计模式——享元模式,它通过共享技术有效支持大量细小对象,减少实例数量,提高内存效率。文中提供了Java实现示例,包括抽象接口Conn、具体实现JdbcConn及工厂类ConnFactory。

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

享元模式:运用共享技术有效地支持大量细的对象,可以避免大量非常相似的开销。

在程序设计中,有时需要生成大量细度的类实例来表示数据。如果发现这些实例除了几个参数外基本上都是相同的。有时就能够受大幅度得减少需要实例化的类的数量。如果能把那些参数移到类实例的外面,在方法调用时讲它们传递进来,就可以通过共享大幅度地减少单个实例的数目。


package com.jerry.design.flyweight; abstract class Conn { public abstract void getConn(); }
package com.jerry.design.flyweight; import java.util.HashMap; import java.util.Map; public class ConnFactory { private Map<String, Conn> ConnPool = new HashMap<String, Conn>(); private static ConnFactory connFactory = new ConnFactory(); private ConnFactory() { } public static ConnFactory getInstance() { return connFactory; } public Conn addConn(String name) { Conn conn = null; if (ConnPool.containsKey(name)) { conn = ConnPool.get(name); } else { conn = new JdbcConn(name); ConnPool.put(name, conn); } return conn; } public int getTotal() { return ConnPool.size(); } }package com.jerry.design.flyweight; public class JdbcConn extends Conn { public String name; public JdbcConn(String name) { this.name = name; } @Override public void getConn() { System.out.println("创建了一个" + name + "的jdbc连接。"); } }package com.jerry.design.flyweight; import java.util.ArrayList; import java.util.List; // 测试类 public class Test { private static List<Conn> conns = new ArrayList<Conn>(); private static ConnFactory connFactory; // 增加订单 private static void takeOrders(String name) { conns.add(connFactory.addConn(name)); } public static void main(String[] args) { connFactory = ConnFactory.getInstance(); // 增加连接 takeOrders("Oracle"); takeOrders("sql server"); takeOrders("postgrep"); takeOrders("mysql"); takeOrders("mysql"); takeOrders("db2"); takeOrders("Oracle"); takeOrders("Oracle"); takeOrders("db2"); takeOrders("sql server"); takeOrders("postgrep"); takeOrders("db2"); takeOrders("sql server"); takeOrders("sql server"); takeOrders("postgrep"); for (Conn conn : conns) { conn.getConn(); } System.out.println("一共创建了 " + conns.size() + " 个连接! "); System.out.println("共生成了 " + connFactory.getTotal() + " 个Conn对象! "); } }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值