单例模式与享元模式

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

单例模式(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;
    }

}

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

 

 

posted @ 2013-05-23 10:45  飞默  阅读(3897)  评论(0编辑  收藏  举报