- 浏览: 32287 次
- 性别:
- 来自: 杭州
最近访客 更多访客>>
最新评论
-
bbym010:
通俗易懂,不错
Build模式的理解 -
0000ps:
今天在MSDN上看到一段内容:
Value Object. S ...
Value Object vs. Data Transfer Object (VO vs. DTO)
GOF:运用共享技术有效地支持大量细粒度的对象。
解释一下概念:也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。比如说(这里引用GOF书中的例子)一个文本系统,每个字母定一个对象,那么大小写字母一共就是52个,那么就要定义52个对象。如果有一个1M的文本,那么字母是何其的多,如果每个字母都定义一个对象那么内存早就爆了。那么如果要是每个字母都共享一个对象,那么就大大节约了资源。
在Flyweight模式中,由于要产生各种各样的对象,所以在Flyweight(享元)模式中常出现Factory模式。Flyweight的内部状态是用来共享的,Flyweight factory负责维护一个对象存储池(Flyweight Pool)来存放内部状态的对象。Flyweight模式是一个提高程序效率和性能的模式,会大大加快程序的运行速度.应用场合很多,下面举个例子:
先定义一个抽象的Flyweight类:
在实现一个具体类:
实现一个工厂方法类:
这个工厂方法类非常关键,这里详细解释一下:
在1处定义了一个Hashtable用来存储各个对象;在2处选出要实例化的对象,在6处将该对象返回,如果在Hashtable中没有要选择的对象,此时变量flyweight为null,产生一个新的flyweight存储在Hashtable中,并将该对象返回。
最后看看Flyweight的调用:
下面是运行结果:
1Concrete---Flyweight : Google
2Concrete---Flyweight : Qutr
3Concrete---Flyweight : Google
4Concrete---Flyweight : Google
5Concrete---Flyweight : Google
6Concrete---Flyweight : Google
7objSize = 2
我们定义了6个对象,其中有5个是相同的,按照Flyweight模式的定义“Google”应该共享一个对象,在实际的对象数中我们可以看出实际的对象却是只有2个。
下面给出一个简易的UML图:
[/img]
解释一下概念:也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。比如说(这里引用GOF书中的例子)一个文本系统,每个字母定一个对象,那么大小写字母一共就是52个,那么就要定义52个对象。如果有一个1M的文本,那么字母是何其的多,如果每个字母都定义一个对象那么内存早就爆了。那么如果要是每个字母都共享一个对象,那么就大大节约了资源。
在Flyweight模式中,由于要产生各种各样的对象,所以在Flyweight(享元)模式中常出现Factory模式。Flyweight的内部状态是用来共享的,Flyweight factory负责维护一个对象存储池(Flyweight Pool)来存放内部状态的对象。Flyweight模式是一个提高程序效率和性能的模式,会大大加快程序的运行速度.应用场合很多,下面举个例子:
先定义一个抽象的Flyweight类:
package Flyweight; public abstract class Flyweight { public abstract void operation(); }//end abstract class Flyweight
在实现一个具体类:
1package Flyweight; public class ConcreteFlyweight extends Flyweight { private String string; public ConcreteFlyweight(String str) { string = str; }//end ConcreteFlyweight() public void operation() { System.out.println("Concrete---Flyweight : " + string); }//end operation() }//end class ConcreteFlyweight
实现一个工厂方法类:
1package Flyweight; import java.util.Hashtable; public class FlyweightFactory { private Hashtable flyweights = new Hashtable();//----------------------------1 public FlyweightFactory() {} public Flyweight getFlyWeight(Object obj) { Flyweight flyweight = (Flyweight) flyweights.get(obj);//----------------2 if(flyweight == null) {//---------------------------------------------------3 //产生新的ConcreteFlyweight flyweight = new ConcreteFlyweight((String)obj); flyweights.put(obj, flyweight);//--------------------------------------5 } return flyweight;//---------------------------------------------------------6 }//end GetFlyWeight() public int getFlyweightSize() { return flyweights.size(); } }//end class FlyweightFactory
这个工厂方法类非常关键,这里详细解释一下:
在1处定义了一个Hashtable用来存储各个对象;在2处选出要实例化的对象,在6处将该对象返回,如果在Hashtable中没有要选择的对象,此时变量flyweight为null,产生一个新的flyweight存储在Hashtable中,并将该对象返回。
最后看看Flyweight的调用:
1package Flyweight; import java.util.Hashtable; public class FlyweightPattern { FlyweightFactory factory = new FlyweightFactory(); Flyweight fly1; Flyweight fly2; Flyweight fly3; Flyweight fly4; Flyweight fly5; Flyweight fly6; /** *//** *//** *//** Creates a new instance of FlyweightPattern */ public FlyweightPattern() { fly1 = factory.getFlyWeight("Google"); fly2 = factory.getFlyWeight("Qutr"); fly3 = factory.getFlyWeight("Google"); fly4 = factory.getFlyWeight("Google"); fly5 = factory.getFlyWeight("Google"); fly6 = factory.getFlyWeight("Google"); }//end FlyweightPattern() public void showFlyweight() { fly1.operation(); fly2.operation(); fly3.operation(); fly4.operation(); fly5.operation(); fly6.operation(); int objSize = factory.getFlyweightSize(); System.out.println("objSize = " + objSize); }//end showFlyweight() public static void main(String[] args) { System.out.println("The FlyWeight Pattern!"); FlyweightPattern fp = new FlyweightPattern(); fp.showFlyweight(); }//end main() }//end class FlyweightPattern
下面是运行结果:
1Concrete---Flyweight : Google
2Concrete---Flyweight : Qutr
3Concrete---Flyweight : Google
4Concrete---Flyweight : Google
5Concrete---Flyweight : Google
6Concrete---Flyweight : Google
7objSize = 2
我们定义了6个对象,其中有5个是相同的,按照Flyweight模式的定义“Google”应该共享一个对象,在实际的对象数中我们可以看出实际的对象却是只有2个。
下面给出一个简易的UML图:
[/img]
发表评论
-
Facade vs Proxy
2010-04-02 08:36 1221Question: i feel there is not m ... -
UML中关联(association)和依赖(dependency)的区别
2010-03-30 08:56 3262这个问题不仅我们这些小喽罗会迷惑,很多大拿们也没有统一的认识, ... -
Aggregation v.s. Composition
2010-03-30 08:13 1383Aggregation Aggregation is a k ... -
UML中几种类间关系:继承、实现、依赖、关联、聚合、组合
2009-12-06 23:13 1236继承,泛化(Generalization) 指的是一个类( ... -
Build模式的理解
2009-11-26 23:23 2201Builder模式 是为了将构建复杂对象的组装过程和它的创建部 ... -
设计模式简图
2009-11-26 22:00 889... -
Proxy, Builder and Decoration 异同点
2009-11-09 13:52 0晚上写分打发打发法 -
面向对象设计原则
2009-11-07 09:43 728正如牛顿三大定律 ... -
Using the Prototype pattern to clone objects
2009-09-27 15:48 920Prototype pattern is one of the ... -
Is a Java Immutable Class Always final?
2009-09-27 15:10 1534In response to my recent blog p ... -
Defensive copying
2009-09-27 14:46 999A mutable object is simply an o ... -
Copy constructors
2009-09-27 14:29 817Copy constructors : provi ... -
Immutable objects
2009-09-27 14:13 873Immutable objects are simply ob ... -
Java Immutable Class
2009-09-27 14:09 2006Java Immutable Class[ From ] ... -
Value Object vs. Data Transfer Object (VO vs. DTO)
2009-09-18 10:31 1651The pattern which is known toda ...
相关推荐
享元模式是设计模式中的一种结构型模式,它主要通过共享已有对象来减少内存中对象的数量,从而提高系统性能。在C#编程中,享元模式尤其适用于那些创建大量相似对象且内存消耗较大的场景。本篇文章将深入探讨享元模式...
享元模式(Flyweight Pattern)是设计模式中的一种优化模式,主要用于减少创建大量相似对象所需的内存消耗。在C++程序设计中,当系统中存在大量的相同或相似的对象时,使用享元模式可以有效地降低内存占用,提高系统...
享元模式(Flyweight Pattern)是一种结构型设计模式,它能有效地减少系统中对象的数量,从而降低内存消耗,提高性能。这种模式通过共享大量相似对象的内部状态来达到这一目标,而只保留对象的外部状态在外部管理。...
享元模式(Flyweight Pattern)是一种结构型设计模式,用于减少创建大量小对象所带来的内存开销。通过共享对象,享元模式能够有效地支持大量细粒度的对象,减少内存使用并提高性能。它常用于需要大量重复对象的场景...
享元模式(Flyweight Pattern)是软件设计中的一种结构型设计模式,它通过共享技术来支持大量细粒度的对象,以此来降低内存中对象的数量。在PHP中实现享元模式,可以帮助我们优化程序性能,特别是在对象数目过多时,...
享元模式(Flyweight Pattern)是一种结构型设计模式,旨在减少大量相似对象的创建,降低系统资源的开销和内存压力。该模式通过共享已经存在的对象来大幅减少需要创建的对象数量,避免创建大量相似类带来的开销,...
适配器模式(Adapter Pattern) 提供者模式(Provider Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 原型模式(Prototype Pattern) 责任链模式(Chain of Responsibility Pattern) 中介者模式...
享元模式(Flyweight Pattern)是结构型模式的一种,主要用于减少大量相似对象的内存占用,提高系统的性能和效率。 模式定义 享元模式的定义是:运用共享技术有效地支持大量细粒度的对象。该模式将一个对象的状态...
**享元模式(Flyweight Pattern)** 享元模式是一种用于节省内存的结构型设计模式,它通过共享大量细粒度对象来减少内存消耗。享元模式通常用于处理大量相似对象的场景,例如在文本编辑器中处理字符、在图形渲染中...
享元模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享来高效地支持大量细粒度对象的使用,减少内存使用或计算时间。享元模式可以有效地支持大量对象的复用,使程序尽可能减少创建对象的次数,从而降低...
享元模式(Flyweight Pattern) 代理模式(Proxy Pattern) 3. 行为型模式 责任链模式(Chain of Responsibility Pattern) 命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 迭代器模式...
享元模式(Flyweight Pattern)是一种对象结构型设计模式,它的主要目的是通过共享技术来有效地支持大量细粒度对象的复用。在享元模式下,系统仅使用少量相似但状态变化不大的对象,这些对象可以被多次复用,极大地...
1、基础概念 1.2 类间关系 关联关系(Association) 聚合关系(Aggregation) 组合关系(Composition) 依赖关系(Dependency) 泛化关系(Generalization) 实现关系(Realization) ...享元模式(Flyweight Pattern)
享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象. 下面是一个享元模式的demo: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'Andy' """ 大话设计模式 设计模式——享元模式 ...
享元模式(Flyweight Pattern) 代理模式(Proxy Pattern) 3 行为型模式 这些设计模式特别关注对象之间的通信。 责任链模式(Chain of Responsibility Pattern) 命令模式(Command Pattern) 解释器模式...
享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 行为型: 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 16. 观察者模式(Observer Pattern) 17. ...
享元模式(Flyweight Pattern) 代理模式(Proxy Pattern) 行为型模式用来对类或对象怎样交互和怎样分配职责进行描述,主要包含以下11种设计模式: 责任链模式(Chain of Responsibility Pattern) ...
在这个名为"designPattern8"的压缩包中,我们可以深入探讨享元模式的原理、应用场景以及如何在实际项目中实现它。 享元模式的核心思想是运用共享技术有效地支持大量细粒度的对象。通常,这些对象具有许多相同的属性...
1.简介享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。2.举例当使用Integer.valueOf创建对象