zoukankan      html  css  js  c++  java
  • 单例模式与享元模式

    设计模式中最为熟悉的莫过于这两种模式,而它们之间也有着很相似的地方。

    单例模式(Singleton)的定义:是为了确保一个类只能产生一个实例,从而节省对象创建所花费的时间,从而对系统内存使用频率也会减低。

    享元模式(FlyWeight)的定义:是为系统中存在多个相同的对象,那么只需要共享一个对象的拷贝。

    个人认为从这两个模式的定义而言,它们的目的是一样的,至少就内存的开销问题这点,两者是相同的。而享元模式可以看成是单例的一个扩展。

    下面是单例的实现方式:

     1 public class SingleDevise {
     2 
     3     private SingleDevise(){}
     4     
     5     private static SingleDevise single=null;
     6     
     7     public static synchronized SingleDevise getIntance(){
     8         if(single==null){
     9             single=new SingleDevise();
    10         }
    11         return single;
    12             
    13     }
    14 }

         上面的代码接对象的生成做了延迟加载,它的时耗会高一点,但是确保系统启动时没有额外的负载,这里我还想说的时,虽然就单例模式中的私有构造函数,

    就一般做法时没法在外面得到它的实例对象,但是对于极端的做法通过反射机制还是能够解决这种问题的。所以我觉得单例的实现还不是很完善。

        而享元模式的实现相对会比较复杂点。首先它的角色需要有 享元工厂,抽象享元,具体享元类,main

    但是实现还是比较容易的

    public class FlyweightFactory {
        
        Map<String, Employer> map=new HashMap<String, Employer>();
        
        public Employer getEmployer(String name){
            Employer e=map.get(name);
            if(e==null){
                System.out.println("map is empty");
                e=new Employer(name);
                map.put(name, e);
            }
            return e;
        }
    
    }

    享元工厂是这个模式的核心,了解这个类就可以了。

  • 相关阅读:
    switch case加范围判断
    对requestAnimationFrame的一点理解
    用dos命令导出一个文件夹里面所有文件的名字(装逼利器)
    zookeeper基本知识入门(一)
    hadoop学习(七)----mapReduce原理以及操作过程
    centos虚拟机配置静态ip
    linux 配置ssh无密码登录不起作用的解决方案
    linux下安装开发环境
    hadoop学习(五)----HDFS的java操作
    hadoop学习(四)----windows环境下安装hadoop
  • 原文地址:https://www.cnblogs.com/feimo/p/3094424.html
Copyright © 2011-2022 走看看