美文网首页
设计模式-结构模式-享元模式

设计模式-结构模式-享元模式

作者: 阿棍儿_Leon | 来源:发表于2020-04-29 16:15 被阅读0次

享元模式也称羽量级模式或者蝇级模式。这种模式可以用工具箱来理解。用户可以向工具箱请求工具,工具箱可以提供已经存在的工具对象,或者没有现成的工具对象,就创建一个,可以提供给下次需要的用户。
工具的状态可以分为内部和外部两种,内部状态是工具本身固有的,外部状态与工具的使用场景有关,工具的使用过程可以影响它们。
工具如果能在一定程度上复用,理论上就不用对每一个用户或者每一次使用新创建一个工具对象,这就是这种模式在创建对象这件事上的优化空间。

以下代码定义了“工具”抽象类,intrinicStatus是内部状态,extrinicStatus是外部状态。

#include <iostream>

using namespace std;

class FlyWeight
{
protected:
    int intrinicStatus;
public:
    int extrinicStatus;
    virtual void Use(int status)=0;
};

以下代码定义了两种具体的“工具”类。

class FlyWeightA:public FlyWeight
{
public:
    FlyWeightA()
    {
        intrinicStatus = 0;
    }
    void Use(int status)
    {
        extrinicStatus = status;
        cout<<__PRETTY_FUNCTION__<<endl;
        cout<<"in="<<intrinicStatus<<",ex="<<extrinicStatus<<endl<<endl;
    }
};

class FlyWeightB:public FlyWeight
{
public:
    FlyWeightB()
    {
        intrinicStatus = 1;
    }
    void Use(int status)
    {
        extrinicStatus = status;
        cout<<__PRETTY_FUNCTION__<<endl;
        cout<<"in="<<intrinicStatus<<",ex="<<extrinicStatus<<endl<<endl;
    }
};

以下代码定义了“工具箱”类,用户可以用它得到“工具”。

class FlyWeightFactory
{
private:
    FlyWeight* flyWeights[2];
public:
    FlyWeightFactory()
    {
        flyWeights[0]=nullptr;
        flyWeights[1]=nullptr;
    }
    FlyWeight* GetFlyWeight(const int key)
    {
        if (key >= sizeof(flyWeights)/sizeof(flyWeights[0]) || key < 0)
        {
            return nullptr;
        }
        if (flyWeights[key])
        {
            return flyWeights[key];
        }
        FlyWeight* flyweight;
        switch (key)
        {
        case 0:
            flyweight = new FlyWeightA();
            break;
        case 1:
            flyweight = new FlyWeightB();
            break;
        default:
            break;
        }
        flyWeights[key] = flyweight;
        return flyweight;
    }
};

以下代码使用“工具箱”先后获得两个“工具”,并进行了使用。

int main(void){
    FlyWeightFactory FWFactory;
    FlyWeight* FW0 = FWFactory.GetFlyWeight(0);
    FlyWeight* FW1 = FWFactory.GetFlyWeight(1);
    FW0->Use('0');
    FW1->Use('1');
    delete FW0;
    delete FW1;
    return 0;
}

输出

virtual void FlyWeightA::Use(int)
in=0,ex=48

virtual void FlyWeightB::Use(int)
in=1,ex=49

相关文章

  • Java设计模式——享元模式

    Java设计模式之享元模式 这期跟大家聊的的设计模式是享元模式,该模式也是结构模式。 简介 利用共享的方式解决大量...

  • 设计模式--享元模式

    目录 本文的结构如下: 引言 什么是享元模式 模式的结构 典型代码 代码示例 单纯享元模式和复合享元模式 模式扩展...

  • 结构型模式:享元模式

    文章首发:结构型模式:享元模式 七大结构型模式之六:享元模式。 简介 姓名 :享元模式 英文名 :Flyweigh...

  • 好程序员Java培训​分享java设计模式之享元模式

    好程序员Java培训​分享java设计模式之享元模式,Java设计模式中的享元模式。享元模式有点类似于单例...

  • 设计模式-享元模式

    享元模式介绍 享元模式(Flyweight Pattern)是结构型设计模式的一种。其实对象池的一种实现方式,通过...

  • 手撸golang 结构型设计模式 享元模式

    手撸golang 结构型设计模式 享元模式 缘起 最近复习设计模式拜读谭勇德的<<设计模式就该这样学>>本系列笔...

  • Android常用设计模式

    设计模式分类 创建型模式工厂方式模式建造者模式抽象工程模式原型模式单例模式 结构型模式桥接模式代理模式享元模式外观...

  • Java设计模式_享元模式

    点击链接跳转:设计模式——享元模式

  • 二十一、享元模式

    1. 何为享元模式 定义:通过共享已存在的对象,减少创建对象内存开销的设计模式被称为享元模式。 享元模式和单例模式...

  • 享元模式C++

    享元模式,就是运用共享技术有效地支持大量细粒度的对象。 享元模式结构图 享元模式基本代码 应用场景 享元模式可以避...

网友评论

      本文标题:设计模式-结构模式-享元模式

      本文链接:https://www.haomeiwen.com/subject/eotnwhtx.html