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

2019/12/29

共享系统中大量的细粒度对象

享元模式

在oop中,一切都要是对象,那肯定不可避免地会产生许多零碎的小对象,而且这些小对象都是相同的

小对象

interface FlyWeight{}

系统存在大量此接口的子类的小对象,但是这些小对象的创建不是让客户程序员手动创建,而是提供一个统一的接口,供客户程序调用

小对象工厂

class FlyWeightFactory{

    public FlyWeight get(){
        if (condition1){
            return flyweight1;
        }else{
            return flyweight2;
        }
    }
}
  • 需要注意的是,这些小对象都是不可变对象

使用

FlyWeightFactory factory = new FlyWeightFactory();
FlyWeight flyWeight = factory.get();

何时使用

  • 使用了大量的对象,造成存储开销很大

类图

实例

考虑一个系统,它需要不停地对外发送各种消息,消息很多,但是分类一下,只要几种消息类型,针对这种情况,我们就可以使用享元模式

消息

interface Message{}

各种消息

class HeartBeatMessage implements Message{}
class ControlltMessage implements Message{}
...

消息工厂

class MessageFactory{
    public Message get(){...}
}

现在,我们在需要发送某种消息的时候,不需要自己创建,直接从消息工厂获取即可

Post Directory