java设计模式-享元模式

标签: 设计模式 java
8人阅读 评论(0) 收藏 举报
分类:
package com.hcmony.flyweight;

/**
 * <h3>Shenjue.java基本描述</h3>
 * <p></p>
 *
 * @author hcmony
 * @since V1.0.0, 2018/04/03 20:25
 */
public class Flyweight {
	private  String name;
	public Flyweight(String name){
		this.name=name;
	}

	@Override
	public String toString() {
		return "Flyweight{" +
				"name='" + name + '\'' +
				'}';
	}
}
package com.hcmony.flyweight;

import java.util.Vector;

/**
 * <h3>
 *     享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。
 *     这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。
 		享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。
 * </h3>
 * <p>
 *    	优点:大大减少对象的创建,降低系统的内存,使效率提高。
 		缺点:提高了系统的复杂度,需要分离出外部状态和内部状态,而且外部状态具有固有化的性质,
 			不应该随着内部状态的变化而变化,否则会造成系统的混乱。
 		使用场景: 1、系统有大量相似对象。 2、需要缓冲池的场景。
 		注意事项: 1、注意划分外部状态和内部状态,否则可能会引起线程安全问题。 2、这些类必须有一个工厂对象加以控制。
 * </p>
 *
 * @author hcmony
 * @since V1.0.0, 2018/04/08 21:27
 */
public class FlyweightPool {
	private Vector<Flyweight> pool;

	private int poolSize = 100;
	private static FlyweightPool instance = null;
	Flyweight flyweight = null;

	private FlyweightPool() {
		pool = new Vector<Flyweight>(poolSize);

		for (int i = 0; i < poolSize; i++) {
			flyweight = new Flyweight(getName(i));
			pool.add(flyweight);
		}
	}

	public String getName(int i){
		return "名字"+i;
	}

	public synchronized Flyweight getFlyweight() {
		if (pool.size() > 0) {
			Flyweight conn = pool.get(0);
			return conn;
		} else {
			return null;
		}
	}


	public static void main(String[] args) {
		FlyweightPool pool = new FlyweightPool();
		System.out.println(pool.getFlyweight());
	}
}

查看评论

JAVA设计模式之享元模式

解释一下概念:也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。比如说一个文本系统,每个字母定一个对象,那么大小写字母一共就是52个,那么就要定义52个对象...
  • jason0539
  • jason0539
  • 2014-04-04 07:34:52
  • 32779

Java设计模式——享元模式

在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。...
  • u013761665
  • u013761665
  • 2016-04-25 13:35:34
  • 11573

Java设计模式(十二)----享元模式

享元模式 一、 概念 二、享元的用途 三、结构和分类 1、单纯享元模式  2、复合享元模式 四、享元模式的优缺点 一、概念  Flyweight在拳击比赛中指最轻量级,即“蝇量级”...
  • tanggao1314
  • tanggao1314
  • 2016-01-31 16:17:33
  • 1692

【GOF23设计模式】_享元模式_享元池_内部状态_外部状态_线程池_连接池JAVA242

来源:http://www.bjsxt.com/ 一、S03E242_01【GOF23设计模式】享元模式、享元池、内部状态、外部状态、线程池、连接池package com.test.flyweigh...
  • u013292493
  • u013292493
  • 2016-06-12 22:37:33
  • 789

浅谈JAVA设计模式之——享元模式(Flyweight)

一、概述 运用共享技术有效地支持大量细粒度的对象。 二、适用性 当都具备下列情况时,使用Flyweight模式:        1.一个应用程序使用了大量的对象。        2.完全由于使用大...
  • l1028386804
  • l1028386804
  • 2015-05-07 23:46:11
  • 1796

浅谈Java设计模式(十二)享元模式(Flyweight)

前言: 享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用。 FlyWeightFactory负责创建和管理享元单元,当一...
  • caihongdao123
  • caihongdao123
  • 2016-07-11 10:02:48
  • 2654

java/android 设计模式学习笔记(13)---享元模式

这篇我们来介绍一下享元模式(Flyweight Pattrn),Flyweight 代表轻量级的意思,享元模式是对象池的一种实现。享元模式用来尽可能减少内存使用量,它适合用于可能存在大量重复对象的场景...
  • zhao_zepeng
  • zhao_zepeng
  • 2016-07-10 20:00:29
  • 3709

《设计模式之禅》读书笔记-策略模式、享元模式、工厂模式、门面模式混用

前一篇讲的什么是策略模式,策略模式的优缺点,在实际应用中肯定不能这么简单的应用,需要结合其他模式混用。比如结合门面模式解决所有策略类都需要对外暴露的缺点,使用享元模式解决多次创建实例的缺点等。 此篇...
  • timothy316
  • timothy316
  • 2017-05-15 21:45:03
  • 194

大话设计模式之享元模式

运用共享技术有效的支持大量细粒度的对象。   //是所有具体享元类的超类或接口,通过这个接口,fliweight可以接收并作用于外部状态 abstractclass Flyweight...
  • u012062760
  • u012062760
  • 2015-05-14 11:39:26
  • 271

23种设计模式之_享元模式

一什么是享元模式 二享元模式几个角色抽象享元类Flyweight 具体享元类FlyWeightAImlFlyWeightBIml 享元工厂类FlyweightFactoiy 客户类Client 三享元...
  • o279642707
  • o279642707
  • 2017-02-07 16:01:42
  • 639
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 6万+
    积分: 1301
    排名: 3万+
    博客专栏
    最新评论