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;
        }
    
    }

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

  • 相关阅读:
    Sqlserver 2005 配置 数据库镜像:镜像模式
    Sqlserver 2005 配置 数据库镜像:数据库镜像期间可能出现的故障:镜像超时机制
    Sqlserver 2005 配置 数据库镜像:镜像状态
    Sqlserver 2005 配置 数据库镜像:对数据库镜像设置进行故障排除:重点!!!!!!!!!!!!!
    HTTP请求和响应过程
    HTTP模型头域
    HTTP协议简介
    KeyDown,KeyPress 和KeyUp 之我谈(更新版本)
    jquery ajax loading效果
    HTTP模型头域
  • 原文地址:https://www.cnblogs.com/feimo/p/3094424.html
Copyright © 2011-2022 走看看