设计模式-FlyWeight

FlyWeight模式在实现过程中主要是要为共享对象提供一个对象池,其中有一个类似Factory模式的对象构造工厂,当用户需要一个对象的时候,会象工厂发出一个请求对象的消息,工厂会通过对象池遍历池中的对象,如果有直接返回,没有于是创建。

1、抽象享元(Flyweight)角色:此角色是所有的具体享元类的基类,为这些类规定出需要实现的公共接口,通过这个接口Flyweight可以接受并作用于外部状态。
2、具体享元(ConcreteFlyweight)角色:实现抽象享元角色所规定的接口。如果有内蕴状态(Intrinsic State)的话,必须负责为内蕴状态提供存储空间。享元对象的内蕴状态必须与对象所处的周围环境无关,从而使得享元对象可以在系统内共享的。
3、享元工厂(FlyweightFactory)角色:本角色负责创建和管理享元角色。本角色必须保证享元对象可以被系统适当地共享。当一个客户端对象调用一个享元对象的时候,享元工厂角色会检查系统中是否已经有一个复合要求的享元对象。如果已经有了,享元工厂角色就应当提供这个已有的享元对象;如果系统中没有一个适当的享元对象的话,享元工厂角色就应当创建一个合适的享元对象。
4、客户端(Client)角色:本角色需要维护一个对所有享元对象的引用。本角色需要自行存储所有享元对象的外蕴状态。
#include <iostream>
#include <string>
#include <vector>
#include <cassert>
using namespace std; class FlyWeight
{
public:
virtual ~FlyWeight(){}
virtual void Operation(const string& exState){}
string GetInsState(){return this->_insState;}
protected:
FlyWeight(string insState)
{this->_insState=insState;}
private:
string _insState;
}; class ConFlyweight:public FlyWeight
{
public:
ConFlyweight(string insState):FlyWeight(insState)
{cout<<"ConFlyweight Build "<< insState<<endl;}
~ConFlyweight(){};
void Operation(const string& exState)
{
cout<<this->GetInsState()<<endl;
cout<<exState<<endl;
}
}; class FlyWeightFactory
{
public:
FlyWeightFactory(){}
~FlyWeightFactory(){}
FlyWeight* GetFlyweight(const string& key)
{
vector<FlyWeight*>::iterator it=_fly.begin();
for(;it!=_fly.end();it++)
{
if((*it)->GetInsState()==key)
{
cout<<"Have Created"<<endl;
return *it;
}
}
FlyWeight* fn=new ConFlyweight(key);
_fly.push_back(fn);
return fn;
}
private:
vector<FlyWeight*> _fly;
}; void main()
{
FlyWeightFactory *fw=new FlyWeightFactory();
FlyWeight* fw1=fw->GetFlyweight("Jackill");
FlyWeight* fw2=fw->GetFlyweight("Rukawa");
FlyWeight* fw3=fw->GetFlyweight("Jackill");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值