亨元模式

Posted blogofjzq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了亨元模式相关的知识,希望对你有一定的参考价值。

亨元模式和单例模式相似,都是为了节省内存。

对于一个可复用的对象,一百个需要用到的地方获得同一个对象比创建一百个新的对象更节省内存,这就是单例模式。

亨元模式在单例的基础上进行了拓展,把状态分成可共享的内部状态和不可共享的外部状态。能共享内部状态的获取同一个对象。

亨元模式的核心在Factory,它负责判断是创建新对象还是返回已有对象。

技术分享图片

代码如下:

写一个亨元抽象类:

public abstract class Flyweight {
    public String inner;
    public Flyweight(String inner)
    {
        this.inner=inner;
    }
    public abstract void operation(String out);
}

写实现:

public class FlyweightImp extends Flyweight{
    public FlyweightImp(String inner) {
        super(inner);
    }
    public void operation(String out) {
        System.out.println("this is inner state:"+inner);
        System.out.println("this is out state:"+out);
    }
}

写工厂:

public class FlyweightFactory {
    public static Map<String,Flyweight> FlyMap=new HashMap<String,Flyweight>();
    public static Flyweight getFly(String inner)
    {
        if(FlyMap.containsKey(inner))
        {
            return FlyMap.get(inner);
        }
        else
        {
            Flyweight f=new FlyweightImp(inner);
            FlyMap.put(inner, f);
            return f;
        }
    }
}

最后测试:

public class test {
    public static void main(String[] args)
    {
        Flyweight fw=FlyweightFactory.getFly("a");
        fw.operation("out1");
        fw=FlyweightFactory.getFly("a");
        fw.operation("out2");
        fw=FlyweightFactory.getFly("b");
        fw.operation("out3");
        fw=FlyweightFactory.getFly("b");
        fw.operation("out4");
    }
}

在测试中,一共创建了两个Flyweight。

以上是关于亨元模式的主要内容,如果未能解决你的问题,请参考以下文章

亨元模式(对象池)

JavaScript设计模式

Java面试题之Integer.valueOf(String s);采用了什么设计模式

JavaScript---设计模式总结

设计模式分类

用于从 cloudkit 检索单列的代码模式/片段