设计模式-FlyWeight(结构型模式) 针对 需要创建大量对象的情形,被共享的状态作为内部状态,不被共享的状态作为外部状态
2024-09-02 01:45:47
以下代码来源: 设计模式精解-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 ; }
最新文章
- sonn_game网站开发01:写在最前面
- JAVA GUI编程学习笔记目录
- HDU 1564 Play a game(巴什博弈)
- Java多线程synchronized同步
- Codeforces 724 E Goods transportation
- struts2与velocity的整合有两种方式
- mysql语句在客户端与服务端的基本使用
- java中gson的简单使用
- 在MVC中添加拦截器实现登录后的权限验证
- 201521123088《java程序设计》第十周学习总结
- go实例之函数
- PyCharm 专题
- 箭头函数里this理解
- 关于echarts生成雷达图的一些参数介绍
- 脚本监控web服务器,工作不正常发邮件提醒
- Spring Boot参数校验
- echarts仪表盘
- MVC常用特性使用
- [VS 2015] VS2015 完整ISO镜像包
- javac后期需要重点阅读的类
热门文章
- Git实战指南----跟着haibiscuit学Git(第四篇)
- git配置:本地仓库提交到远程仓库
- Redis 到底是怎么实现“附近的人”这个功能的呢?
- C lang:Pointer and Array
- ABP入门教程0 - 目录
- Docker 中卷组管理
- 生产环境Shell脚本Ping监控主机是否存活(多种方法)
- 因果推理的春天系列序 - 数据挖掘中的Confounding, Collidar, Mediation Bias
- 安装oracle11g客户端
- 2019年全国高校计算机能力挑战赛 C语言程序设计决赛