设计模式理解(十)结构型——享元(Flyweight)

最后一个结构型,享元。没有太多的项目经验,对这种模式只有一种概念上的理解,就是为了节约内存等资源,把可重用的东西只申请一次,然后处处调用,同时用Hash进行管理。

直接上图:

代码:

/*********  大话设计模式上的代码 ************/

abstract class Flyweight{
    public abstract void Operation(int extrinsicstate);
}

class ConcreteFlyweight : Flyweight{
    public override void Operation(int extrinsicstate){
        Console.WriteLine("具体Flyweight : " + extrinsicstate);
    }
}

class UnshareConcreteFlyweight : Flyweight{
    public override void Operation(int extrinsicstate){
        Console.WriteLine("不共享的具体Flyweight : " + extrinsicstate);
    }
}

class FlyweightFactory{
    private Hashtable flyweights = new Hashtable();
    public FlyweightFactory(){
        flyweights.add("X",new ConcreteFlyweight());
        flyweights.add("Y",new ConcreteFlyweight());
    }
    public Flyweight GetFlyweight(string key){
        return ((Flyweight)flyweights[key]);
    }
}
时间: 2024-10-12 20:34:23

设计模式理解(十)结构型——享元(Flyweight)的相关文章

设计模式(十二)享元模式(Flyweight Pattern)

一.引言 在软件开发过程,如果我们需要重复使用某个对象的时候,如果我们重复地使用new创建这个对象的话,这样我们在内存就需要多次地去申请内存空间了,这样可能会出现内存使用越来越多的情况,这样的问题是非常严重,然而享元模式可以解决这个问题,下面具体看看享元模式是如何去解决这个问题的. 二.享元模式的详细介绍 在前面说了,享元模式可以解决上面的问题了,在介绍享元模式之前,让我们先要分析下如果去解决上面那个问题,上面的问题就是重复创建了同一个对象,如果让我们去解决这个问题肯定会这样想:“既然都是同一个

设计模式(十二)—— 享元模式

模式简介 运用共享技术有效地支持大量细粒度地对象. 通常情况下,面向对象技术可以增强系统地灵活性及可扩展性,在系统开发过程中,我们会不断地增加类和对象.当对象数量过多时,将会带来系统开销过高.性能下降等问题.享元模式通过共享相同或相似的对象来解决这一类问题.在介绍享元模式之前,首先要弄清楚两个概念:内部状态(Intrinsic State)和外部状态(Extrinsic State). 内部状态是存储在享元对象内部并且不会随环境改变而改变的状态,因此内部状态可以共享.例如,围棋中的棋子,它们的形

设计模式汇总:结构型模型(下)

总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 其实还有两类:并发型模式和线程池模式. 前面已经介绍了几个结构型模型:<设计模式汇总:结构型模型(上)> 四.外观模式(Fasade) 外

Java 实现享元(Flyweight)模式

/** * 字母 * @author stone * */ public class Letter { private String name; public Letter(String name) { this.name = name; } public String getName() { return name; } } /** * 一个产生字母对象的 享元工厂(单例工厂) * @author stone * */ public class LetterFactory { private

设计模式之第12章-享元模式(Java实现)

设计模式之第12章-享元模式(Java实现) “怎么回事,竟然出现了OutOfMemory的错误.鱼哥,来帮我看看啊.”“有跟踪错误原因么?是内存泄露么?”“不是内存泄露啊,具体原因不知道啊.对了,有说新对象申请不到内存空间.”“这个原因么,我曾写过一篇博文:叫OutOfMemory简单分析.不过你的明显是因为代码问题,产生对象太多,导致内存被耗尽,正好一会有堂课,讲的正好能解决你的问题.”(嘿嘿,轮到我享元模式出场了~) 享元模式之自我介绍 我,享元模式乃是池技术中的重要实现方式,具体定义如下

一起学java设计模式--代理模式(结构型模式)

代理模式 应用软件所提供的桌面快捷方式是快速启动应用程序的代理,桌面快捷方式一般使用一张小图片来表示(Picture),通过调用快捷方式的run()方法将调用应用软件(Application)的run()方法.使用代理模式模拟该过程,绘制类图并编程实现. package ProxyPattern; interface Software { void run(); } class Application implements Software { public void run() { Syste

设计模式之二十二:享元模式(FlyWeight)

享元模式: 使用共享技术有效地支持大量细粒度的对象. Use sharing to support large numbers of fine-grained objects efficiently. 这个设计模式和它的名字一样核心是为了共享代码. UML图: 主要包括: FlyWeight:声明了一个接口,通过这个接口所有的FlyWeight能够接受并作用于外部的状态. ConcreteFlyWeight:实现了FlyWeight声明的接口,并且可能会增加一些内部状态. UnSharedCon

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

1) 意图: 运用共享技术有效的支持大量细粒度的对象.(理解享元模式,主要是对象被分解成intrinsic和extrinsic两部分,即内部的共享状态和外部状态) 2) 结构: 其中: Flyweight描述一个接口,通过这个接口Flyweight可以接受并作用于外部状态 ConcreteFlyweight实现Flyweight接口,并为内部状态增加存储空间 UnsharedConcreteFlyweight不需要共享的外部状态 FlyweightFactory创建并管理Flyweight对象

设计模式总结篇系列:享元模式(Flyweight)

我们都知道,Java中的String类具有如下特性:String是一个不可变类,当直通过用字符串方式使用String对象时,Jvm实际上在内存中只存有一份,且存在字符串常量池中.当对字符串直接进行修改时(如直接联接另一个字符串常量),Jvm会首先去字符串常量池中查找是否已经存在此字符串,不存在则创建一份放在池中,存在则直接使用.诸如此类:当系统中可能具有多个相同的对象时,对于具有相同的内容的对象可以实现对象的共享,即共享池,以此避免不必要的相同对象的创建以减少系统内存的开销.称之为享元模式. 对