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

来源:互联网 发布:c语言小写变大写 编辑:程序博客网 时间:2024/03/28 15:57

1、享元模式

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

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

clip_image011

 

    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());}}

 

         

原创粉丝点击