<其它设计模式介绍及案例源码下载 >
简介:享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。
意图:运用共享技术有效地支持大量细粒度的对象。
主要解决:在有大量对象时,有可能会造成内存溢出,我们把其中可重用对象在创建后保存起来,当再次需要时,直接返回在内存中已有的对象,避免重新创建。
缺点:提高了系统的复杂度,需要分离出外部状态和内部状态,而且外部状态具有固有化的性质,不应该随着内部状态的变化而变化,否则会造成系统的混乱。
使用场景: 1、系统有大量相似对象。 2、需要缓冲池的场景。
实现案例:数据库连接对象的创建与使用,首先定义连接对象接口ConnectInterf,具体实现对象ConnectObj,在多次使用同一个连接对象时,只有第一次是创建的,其他的都是从存储器中获取。
例如下:
public interface ConnectInterf { public void ConnectObj(String sql); } public class ConnectEntity implements ConnectInterf { String dbNameAndUserName; public ConnectEntity(String dbNameAndUserName) { super(); this.dbNameAndUserName = dbNameAndUserName; } public String getDbNameAndUserName() { return dbNameAndUserName; } public void setDbNameAndUserName(String dbNameAndUserName) { this.dbNameAndUserName = dbNameAndUserName; } @Override public void ConnectObj(String sql) { System.out.println("执行sql:"+sql); } } public class ConnectFactory { private static final Map<String,ConnectEntity> conObjs=new HashMap<String,ConnectEntity> (); public static ConnectEntity getConnectObj(String dbAndUserName) { if(!conObjs.containsKey(dbAndUserName)) { ConnectEntity ce=new ConnectEntity(dbAndUserName); conObjs.put(dbAndUserName, ce); System.out.println("新创建一个"+dbAndUserName+"连接"); return ce; } else { System.out.println("直接获取"); return conObjs.get(dbAndUserName); } } } public class TestClass { public static void main(String[] args) { ConnectEntity ce=ConnectFactory.getConnectObj("orcl:scott"); ce.ConnectObj("select * from dual"); ConnectEntity ce2=ConnectFactory.getConnectObj("orcl:userA"); ce2.ConnectObj("select * from dual"); ConnectEntity ce3=ConnectFactory.getConnectObj("orcl:userB"); ce3.ConnectObj("select * from dual"); ConnectEntity ce4=ConnectFactory.getConnectObj("orcl:scott"); } }