设计模式笔记之享元模式的使用

<其它设计模式介绍及案例源码下载 >

简介:享元模式(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");

	}

}

猜你喜欢

转载自blog.csdn.net/fsy9595887/article/details/84368568