以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码

//Flyweight.h

#pragma once
#include<string>
class FlyWeight
{
public:
virtual ~FlyWeight();
virtual void Operation(const std::string & extrinsicState);
std::string GetIntrinsicState();
protected:
FlyWeight(std::string intrinsicState);
private:
std::string _intrinsicState;
}; class ConcreateFlyWeight :public FlyWeight
{
public:
ConcreateFlyWeight(std::string intrinsicState);
~ConcreateFlyWeight();
void Operation(const std::string& extrinsicState);
protected:
private:
};

//Flyweight.cpp

#include"Flyweight.h"
#include<iostream> FlyWeight::FlyWeight(std::string intrinsicState)
{
this->_intrinsicState = intrinsicState;
}
FlyWeight::~FlyWeight(){}
void FlyWeight::Operation(const std::string& extrinsicState)
{ }
std::string FlyWeight::GetIntrinsicState()
{
return this->_intrinsicState;
}
ConcreateFlyWeight::ConcreateFlyWeight(std::string intrinsicState) :FlyWeight(intrinsicState)
{
std::cout << "ConcreateFlyWeight Build..." << intrinsicState << std::endl;
}
ConcreateFlyWeight::~ConcreateFlyWeight(){}
void ConcreateFlyWeight::Operation(const std::string& extrinsicState)
{
std::cout << "ConcreateFlyWeight:内部[" << this->GetIntrinsicState() << "]外部[" << extrinsicState << "]" << std::endl;
}

//FlyWeightFactory.h

#pragma once

#include"Flyweight.h"
#include<vector>
#include<string> class FlyWeightFactory
{
public:
FlyWeightFactory();
~FlyWeightFactory();
FlyWeight* GetFlyWeight(const std::string& key);
protected:
private:
std::vector<FlyWeight*>_fly;
};

//FlyWeightFactory.cpp

#include"FlyWeightFactory.h"
#include<iostream>
#include<string> FlyWeightFactory::FlyWeightFactory(){}
FlyWeightFactory::~FlyWeightFactory(){}
FlyWeight* FlyWeightFactory::GetFlyWeight(const std::string& key)
{
for (std::vector<FlyWeight*>::iterator it = _fly.begin(); it != _fly.end(); ++it)
{
if ((*it)->GetIntrinsicState() == key)
{
std::cout << "Already created by users..." << std::endl;
return *it;
}
}
FlyWeight* fn = new ConcreateFlyWeight(key);
_fly.push_back(fn);
return fn;
}

//main.cpp

#include"Flyweight.h"
#include"FlyWeightFactory.h"
#include<string>
int main(int args, char* argv)
{
FlyWeightFactory* flyfac = new FlyWeightFactory();
FlyWeight* fw1 = flyfac->GetFlyWeight("Hello");
FlyWeight* fw2 = flyfac->GetFlyWeight("World");
FlyWeight* fw3 = flyfac->GetFlyWeight("Hello");
getchar();
return ; }

最新文章

  1. sonn_game网站开发01:写在最前面
  2. JAVA GUI编程学习笔记目录
  3. HDU 1564 Play a game(巴什博弈)
  4. Java多线程synchronized同步
  5. Codeforces 724 E Goods transportation
  6. struts2与velocity的整合有两种方式
  7. mysql语句在客户端与服务端的基本使用
  8. java中gson的简单使用
  9. 在MVC中添加拦截器实现登录后的权限验证
  10. 201521123088《java程序设计》第十周学习总结
  11. go实例之函数
  12. PyCharm 专题
  13. 箭头函数里this理解
  14. 关于echarts生成雷达图的一些参数介绍
  15. 脚本监控web服务器,工作不正常发邮件提醒
  16. Spring Boot参数校验
  17. echarts仪表盘
  18. MVC常用特性使用
  19. [VS 2015] VS2015 完整ISO镜像包
  20. javac后期需要重点阅读的类

热门文章

  1. Git实战指南----跟着haibiscuit学Git(第四篇)
  2. git配置:本地仓库提交到远程仓库
  3. Redis 到底是怎么实现“附近的人”这个功能的呢?
  4. C lang:Pointer and Array
  5. ABP入门教程0 - 目录
  6. Docker 中卷组管理
  7. 生产环境Shell脚本Ping监控主机是否存活(多种方法)
  8. 因果推理的春天系列序 - 数据挖掘中的Confounding, Collidar, Mediation Bias
  9. 安装oracle11g客户端
  10. 2019年全国高校计算机能力挑战赛 C语言程序设计决赛