结构型模式-----享元模式(Flyweight)

1、享元模式

          运用共享技术有效的知识大量细粒度的对象。

          他的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销。通常与工厂模式一起使用。

结构型模式-----享元模式(Flyweight)_第1张图片

 

    FlyweightFactory负责创建和管理享元单元,当一个客户端请求时,工厂需要检查当前对象池中是否有复合条件的对象,如果有,就返回已经存在的对象,如果没有

      则创建一个新对象。

     一提到共享池,很容易想到java中的JDBC连接池,适用于做共享的一些对象,同名有一些共有的属性,(如数据库连接池中有:url,driverClassName、username、

       password、dbname)将共有的属性作为内部数据(初始化时就指定),其他的作为外部数据(调用对应的属性赋值方法),这样就可以节省空间,减少实例的数量。

 

    实例一

 

public class ObjectPool {

	private List<Person> pool = new LinkedList<Person>();

	public ObjectPool() {
		for (int i = 0; i < 10; i++) {
			final Person person = new Person();
			this.pool.add(person);
		}
	}

	public Person getPerson() {
		Person person = null;
		if (this.pool.size() > 0) {
			person = this.pool.get(0);
			this.pool.remove(person);
			System.out.println("  ~~ pool get ~~~");
		}
		else {
			person = new Person();
			System.out.println(" ~~  new create ~~~~");
		}
		return person;
	}
}

class Person {

	private String name;
	private String pass;

	public String getName() {
		return this.name;
	}

	public void setName(final String name) {
		this.name = name;
	}

	public String getPass() {
		return this.pass;
	}

	public void setPass(final String pass) {
		this.pass = pass;
	}
}


    模拟调用

	public static void main(final String[] args) {
		final ObjectPool pool = new ObjectPool();
		for (int i = 0; i < 20; i++) {
			final Person person = pool.getPerson();
			person.setName("zhangsan" + i);
			person.setPass("123&" + i);

			System.out.println(" person name : " + person.getName() + "      person pass : " + person.getPass());
		}
	}

 

         

你可能感兴趣的:(23种设计模式,享元模式)