- 浏览: 18326 次
- 性别:
- 来自: 西安
最新评论
享元模式以共享的方式高效地支持大量的细粒度对象.
1).FlyweightDemo.java
package com.flyingh.demo; public class FlyweightDemo { public static void main(String[] args) { String str1 = "abc"; String str2 = "a" + "bc"; String str3 = "abc"; String str4 = str3 + ""; final String str5 = "ab"; System.out.println(str1 == str2); System.out.println(str2 == str3); System.out.println(str3 == str4); str4 = str5 + "c"; System.out.println(str3 == str4); System.out.println("*********"); Integer i1 = 3; Integer i2 = 3; Integer i3 = 1 + 2; System.out.println(i1 == i2); System.out.println(i2 == i3); System.out.println("*********"); Long l1 = 127l; Long l2 = 127l; System.out.println(l1 == l2); } }
程序运行结果如下:
true true false true ********* true true ********* true
2).假设有许许多多的Athlete进行比赛,他们按Key(包含age,sex,weight)分组进行比赛,即使分组后每组也有许许多多的Athlete:
Key.java
package com.flyingh.vo; public class Key { private int age; private Sex sex; private float weight; public Key(int age, Sex sex, float weight) { super(); this.age = age; this.sex = sex; this.weight = weight; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Sex getSex() { return sex; } public void setSex(Sex sex) { this.sex = sex; } public float getWeight() { return weight; } public void setWeight(float weight) { this.weight = weight; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((sex == null) ? 0 : sex.hashCode()); result = prime * result + Float.floatToIntBits(weight); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Key other = (Key) obj; if (age != other.age) return false; if (sex != other.sex) return false; if (Float.floatToIntBits(weight) != Float.floatToIntBits(other.weight)) return false; return true; } @Override public String toString() { return "[age=" + age + ", sex=" + sex + ", weight=" + weight + "]"; } }
Athlete.java
package com.flyingh.vo; public class Athlete { private Key key; public Athlete(Key key) { super(); this.key = key; } public Key getKey() { return key; } public void setKey(Key key) { this.key = key; } public void setName(String name) { System.out.println("名字为:" + name); } }
Sex.java
package com.flyingh.vo; public enum Sex { man, woman; }
AthleteFactory.java
package com.flyingh.pool; import java.util.HashMap; import java.util.Map; import com.flyingh.vo.Key; import com.flyingh.vo.Athlete; public class AthleteFactory { private static Map<Key, Athlete> map = new HashMap<Key, Athlete>(); public static Athlete getAthlete(Key key) { if (map.containsKey(key)) { System.out.println(key + "已经存在!"); return map.get(key); } else { System.out.println(key + "不存在,创建后放入Pool!"); Athlete person = new Athlete(key); map.put(key, person); return person; } } }
Client.java
package com.flyingh.client; import com.flyingh.pool.AthleteFactory; import com.flyingh.vo.Key; import com.flyingh.vo.Athlete; import com.flyingh.vo.Sex; public class Client { public static void main(String[] args) { Key key1 = new Key(18, Sex.man, 60); Key key2 = new Key(20, Sex.woman, 55); Athlete zhangsan = AthleteFactory.getAthlete(key1); zhangsan.setName("张三"); Athlete lisi = AthleteFactory.getAthlete(key1); lisi.setName("李四"); Athlete wangwu = AthleteFactory.getAthlete(key2); wangwu.setName("王五"); Athlete zhaoliu = AthleteFactory.getAthlete(new Key(18, Sex.man, 60)); zhaoliu.setName("赵六"); } }
程序运行结果如下:
[age=18, sex=man, weight=60.0]不存在,创建后放入Pool! 名字为:张三 [age=18, sex=man, weight=60.0]已经存在! 名字为:李四 [age=20, sex=woman, weight=55.0]不存在,创建后放入Pool! 名字为:王五 [age=18, sex=man, weight=60.0]已经存在! 名字为:赵六
发表评论
文章已被作者锁定,不允许评论。
-
Interpreter
2011-11-24 21:19 839Interpreter Pattern:其意图是给定一个语言, ... -
Visitor
2011-11-24 17:37 659Visitor Pattern:表示一个作用于某对象结构中的各 ... -
Mediator
2011-11-24 16:22 663Mediator Pattern: 用一 ... -
Prototype
2011-11-24 11:32 606Prototype Pattern:就是通过复制现在已经存在的 ... -
Memento
2011-11-23 21:56 685Memento Pattern:在不破坏封闭的前提下,捕获一个 ... -
Builder
2011-11-22 16:38 764Builder Pattern:可以将一个产品的内部表象与产品 ... -
Bridge
2011-11-22 15:05 685桥梁模式的用意是"将抽象化(Abstraction) ... -
Chain Of Responsibility
2011-11-21 23:05 658Chain Of Responsibility Pattern ... -
Abstract Factory
2011-11-21 22:00 644下面以Mac和PC的CPU和RAM为例,代码如下: Cpu. ... -
Proxy
2011-11-18 18:47 661Proxy Pattern:对其他对象提供一种代理以控制对这个 ... -
State
2011-11-18 15:57 678State Pattern:当一个对象的内在状态改变时允许改变 ... -
Composite
2011-11-17 17:09 795Composite Pattern:意图是将对象组合成树形结构 ... -
Iterator
2011-11-16 16:56 891Iterator Pattern:其意图是提供一种方法顺序访问 ... -
Template Method
2011-11-16 11:43 661模板方法模式:在一个方法中定义一个算法的骨架,而将一些实 ... -
Facade
2011-11-15 23:00 598Facade Pattern:为子系统中的各类(或结构与方法) ... -
Adapter
2011-11-15 21:43 632Adapter Pattern:将一个类的接口,转换成客户所期 ... -
Command
2011-11-14 23:06 5741).下面以Boss和Clerk为例: Clerk.java ... -
Factory Method
2011-11-13 20:44 595Simple Factory: 以Fruit为例,以下是实现 ... -
Decorator
2011-11-12 23:09 572装饰者可以在所委托被装饰者的行为之前与/或之后,加上自己的 ... -
Observer
2011-11-12 21:30 601观 察 者 模 式 定义了对象之间的一对多依赖,这样一来 ...
相关推荐
"Flyweight"(享元)设计模式是一种结构型模式,其核心目的是为了有效地支持大量细粒度对象的创建和使用,通过共享已经存在的对象来减少内存消耗,提高系统性能。在C#中,Flyweight模式尤其适用于那些内部状态可共享...
本文将深入探讨“轻量级”设计模式之一——Flyweight(享元)模式,它是如何在减少内存消耗的同时提高系统性能的。 Flyweight模式的核心思想是共享对象,通过复用大量相似对象来减少内存占用。这种模式通常在处理...
**C++ Flyweight模式** Flyweight模式是一种设计模式,属于结构型模式的一种,它主要解决的是在大量对象创建时可能导致的内存消耗问题。在计算机科学中,尤其是编程领域,内存管理是一个关键的话题,Flyweight模式...
6共享元模式(Flyweight) 用意:以共享的方式高效地支持大量的细粒度对象
飞重量(Flyweight)设计模式是一种结构型设计模式,它旨在减少对象的创建,从而节约内存,提高系统性能。在面向对象编程中,当大量相似对象的创建导致资源消耗过大时,飞重量模式就能派上用场。这个模式通过共享...
享元模式(Flyweight Pattern)是一种结构型设计模式,用于减少创建大量小对象所带来的内存开销。通过共享对象,享元模式能够有效地支持大量细粒度的对象,减少内存使用并提高性能。它常用于需要大量重复对象的场景...
《软件模式之Flyweight模式》 Flyweight模式是一种设计模式,其主要目的是通过共享技术来减少内存中对象的数量,从而优化内存使用效率。在对象数量庞大且大部分状态可以外部化的情况下,Flyweight模式尤其适用。它...
Java设计模式中的Flyweight模式是一种结构型设计模式,其主要目标是减少对象的创建,通过共享相似对象来降低内存使用和提高性能。在面向对象编程中,如果对象数量过多,可能会导致内存消耗过大,尤其是在处理大量...
Java设计模式中的Flyweight模式是一种结构型模式,其主要目的是减少对象的数量,通过共享大量具有相似属性的对象来节省内存和提高性能。Flyweight模式的核心思想是区分对象的内部状态(intrinsic state)和外部状态...
2. **享元工厂(Flyweight Factory)**:负责创建和管理享元对象,确保享元对象的正确共享,并提供一个接口供客户端获取享元对象。享元工厂还需要处理外部状态,可能需要通过组合或聚合外部状态来构造完整的对象。 3...
2. **Concrete Flyweight(具体享元)类**:实现了Flyweight接口,提供了具体的业务实现。每个具体享元实例都是可共享的,它们共同维护内部状态。 3. **Flyweight Factory(享元工厂)**:负责创建和管理享元对象,...
享元模式(Flyweight Pattern)是一种结构型设计模式,它能有效地减少系统中对象的数量,从而降低内存消耗,提高性能。这种模式通过共享大量相似对象的内部状态来达到这一目标,而只保留对象的外部状态在外部管理。...
享元模式(Flyweight Pattern)是软件设计中的一种结构型设计模式,它通过共享技术来支持大量细粒度的对象,以此来降低内存中对象的数量。在PHP中实现享元模式,可以帮助我们优化程序性能,特别是在对象数目过多时,...
本资源"Flyweight"是关于C++中的享元设计模式的实现。享元模式是一种结构型设计模式,主要目标是通过共享大量相似对象来减少内存消耗,提高系统性能。 享元模式的核心思想是区分对象内部状态(intrinsic state)和...
var flyweight = _factory.GetFlyweight(state); flyweight.Operation(state); } } } ``` 通过上述步骤,享元模式有效地减少了对象的数量,提高了系统性能。然而,它也有其局限性,例如,如果外部状态过多,...
享元模式(Flyweight Pattern)是设计模式中的一种优化模式,主要用于减少创建大量相似对象所需的内存消耗。在C++程序设计中,当系统中存在大量的相同或相似的对象时,使用享元模式可以有效地降低内存占用,提高系统...
享元模式的核心是Flyweight类,它是需要被共享的对象,通常包含两个部分:内在状态(Intrinsic State)和外在状态(Extrinsic State)。内在状态是指对象内部不变的部分,可以在多个对象之间共享;外在状态是随环境...
1. **享元对象(Flyweight)**:它是可共享的对象,通常具有部分状态,这部分状态是可以共享的,不会随环境改变而改变。 2. **内部状态(Intrinsic State)**:这部分状态是享元对象内部维护的状态,可以共享,不会...
软件模式之Flyweight模式.doc