单例模式结合享元模式的使用

1、创建被管理的对象

public class DataCenter {

    private String name;

    public DataCenter(String name)
    {
        this.name = name;
    }

    public String getName()
    {
        return this.name;
    }
}

2、创建工厂类负责对外提供管理对象

import java.util.HashMap;
import java.util.Map;

public class DataCenterFactory {

    /**
     * 数据中心缓存
     */
    private Map<String,DataCenter> dataCenterCache = new HashMap<String,DataCenter>();

    /**
     * 私有构造器
     */
    private DataCenterFactory()    {    }

    /**
     * 由静态内部类维护单例
     * @author admin
     *
     */
    private static class SingletonHolder
    {
        private static DataCenterFactory instance = new DataCenterFactory();
    }

    public static DataCenterFactory getInstance()
    {
        return SingletonHolder.instance;
    }

    /**
     * 对外提供数据中心缓存
     * @param name
     * @return
     */
    public DataCenter getDataCenter(String name)
    {
        if(null == dataCenterCache.get(name))
        {
            dataCenterCache.put(name,new DataCenter(name));
        }
        return dataCenterCache.get(name);
    }

}

1、该管理对象仍能够避过工厂进行创建,如果只能通过工厂进行创建,可否实现?

2、工厂中数据中心缓存的声明能否使用static关键字,有何影响?

private static Map<String,DataCenter> dataCenterCache = new HashMap<String,DataCenter>();
时间: 2024-10-11 12:53:34

单例模式结合享元模式的使用的相关文章

第11章 享元模式(Flyweight Pattern)

原文 第11章 享元模式(Flyweight Pattern) 概述:   面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题.但是在某些情况下,对象的数量可能会太多,从而导致了运行时的代价.那么我们如何去避免大量细粒度的对象,同时又不影响客户程序使用面向对象的方式进行操作?享元模式j就可以让我们更好的复用我们内存中已存在的对象,降低系统创建对象实例的性能消耗 运用共享技术有效地支持大量细粒度的对象.[GOF <设计模式>] 结构图:   举例: 为了方便说清享元模式的核心,我

单例模式,原型模式,享元模式

这三个模式为什么放一起呢.都是减少构造函数多次被构造为目的产生的模式.也就是说(A a=new A(); A b=new A();)这样就两次构造了这个对象 单例模式 在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例.即一个类只有一个对象实例 有一个厨师 Class Cook() { Private Cook() { //面试,工资呀,上班时间呀,反正请个厨师不容易 } Private static Cook _厨师=null; Static Cook(

享元模式与单例模式的区别

享元模式可以再次创建对象 也可以取缓存对象 单例模式则是严格控制单个进程中只有一个实例对象 享元模式可以通过自己实现对外部的单例 也可以在需要的使用创建更多的对象 单例模式是自身控制 需要增加不属于该对象本身的逻辑 两者都可以实现节省对象创建的时间 ThreadPool 线程池 与数据库连接池 都有使用享元模式

Java设计模式菜鸟系列(二十一)享元模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40021651 享元模式(Flyweight):运用共享的技术有效地支持大量细粒度的对象.主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销.在某种程度上,你可以把单例看成是享元的一种特例. 一.uml建模: 二.代码实现 /** * 享元模式(Flyweight):运用共享的技术有效地支持大量细粒度的对象. * * 主要目的是实现对象的共享,即共享池,当系统中对象

《JAVA与模式》之享元模式

Flyweight在拳击比赛中指最轻量级,即"蝇量级"或"雨量级",这里选择使用"享元模式"的意译,是因为这样更能反映模式的用意.享元模式是对象的结构模式.享元模式以共享的方式高效地支持大量的细粒度对象. Java中的String类型 在JAVA语言中,String类型就是使用了享元模式.String对象是final类型,对象一旦创建就不可改变.在JAVA中字符串常量都是存在常量池中的,JAVA会确保一个字符串常量在常量池中只有一个拷贝.Stri

【转】享元模式——实现对象的复用

[作者:刘伟  http://blog.csdn.net/lovelion] 当前咱们国家正在大力倡导构建和谐社会,其中一个很重要的组成部分就是建设资源节约型社会,“浪费可耻,节俭光荣”.在软件系统中,有时候也会存在资源浪费的情况,例如在计算机内存中存储了多个完全相同或者非常相似的对象,如果这些对象的数量太多将导致系统运行代价过高,内存属于计算机的“稀缺资源”,不应该用来“随便浪费”,那么是否存在一种技术可以用于节约内存使用空间,实现对这些相同或者相似对象的共享访问呢?答案是肯定,这种技术就是我

设计模式(十七):享元模式

一.定义 运用共享技术有效地支持大量细粒度的对象. 二.实例 首先,有个享元超类 public abstract class Website { public int websiteid; public Website(int _websiteid) { websiteid = _websiteid; } public abstract void Collecter(); } 其次,具体的子类 public class Mall : Website { public Mall(int _webs

C#设计模式-享元模式

前言 最近开始花点心思研究下设计模式,主要还是让自己写的代码可重用性高.保证代码可靠性.所谓设计模式,我找了下定义:是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.毫无疑问,设计模式于己于他人于系统都是多赢的:设计模式使代码编制真正工程化:设计模式是软件工程的基石脉络,如同大厦的结构一样. 为什么要提倡“Design Pattern(设计模式)”? 根本原因是为了代码复用,增加可维护性.因此这次我们来学习下设计模式,最后会通过C#语言来实现这些设计模式作为例子,深刻理解其中的

设计模式(十二): Flyweight享元模式 -- 结构型模式

说明: 相对于其它模式,Flyweight模式在PHP实现似乎没有太大的意义,因为PHP的生命周期就在一个请求,请求执行完了,php占用的资源都被释放.我们只是为了学习而简单做了介绍. 1. 概述 面向对象技术可以很好地解决系统一些灵活性或可扩展性或抽象性的问题,但在很多情况下需要在系统中增加类和对象的个数.当对象数量太多时,将导致运行代价过高,带来性能下降等问题.比如:例子1:图形应用中的图元等对象.字处理应用中的字符对象等. 2.解决方案: 享元模式(Flyweight):对象结构型模式运用