FlyWeight模式

我一直在想FlyWeight模式和Composite模式有什么区别,因为,他们都有一个专门管理目标对象的类,都使用了容器,所不同的是Composite模式下,管理的类自身就是管理

目标类的子类,同时还可以对所管理的类对象发号施令,而在FlyWeight模式下,管理的类自身与目标没有这种继承关系,他只是记录了目标类对象的一系列指针,并且除此之

外没有任何其他队目标类的操作


我们可以这样认为,Flyweight模式,就是一个特殊的工厂类,只是他有些特别,特别之处在于他可以识别内存中是否有已经标示的类,如果有则直接返回,如果没有则开始创

建,源代码如下:

	#include<string>
using namespace std;
class FlyWeight
{
  private:
   string m_mark;
  public:
   string get_mark()
   {
      return m_mark;
   }
   FlyWeight(string tmp)
   {
      m_mark=tmp; 
   }
   void Operation()
   {
     cout<<m_mark<<endl; 
   }
};
class ConcreteFlyWeight:public FlyWeight
{
   public:
   ConcreteFlyWeight(string tmp)FlyWeight(tmp)
    {
        cout<<tmp<<endl;
    }
   void  Operation()
    {
        cout<<m_mark<<endl;
    }
};
class FlyWeightFac
{
   private:
   vector<flyweight>m_vec;
   public:
   FLyWeight* getFlyWeight(string index)
   { 
      for(vector<flyweight>::iterator itr=m_vec.begin();itr!=m_vec.end();itr++)
       {
            if((*itr)==index)
             return (*itr);
        }
      FlyWeight* hehe=new FlyWeight(index);
      m_vec.push_back(heh);
      return hehe;
   }
};
int main()
{
    FlyWeightFac hehe;
    FlyWeight*p1=hehe.GetFlyWeight("dhsa");
    FlyWeight*p2=hehe.GetFlyWeight("dsa");
  

}
</flyweight></flyweight></string>

现在想想FlyWeight模式的主要作用就是管理内存中的对象,有需要的进行创建,仅此而已,而Composite模式则是将所有已经创建的对象管理起来并对其进行统一处理,就比如Composite的Operation函数,可以对其所有对象进行处理调用,他不负责对象的创建


Flyweight也即享元模式,共享元素的模式,最好的解释是WORD文档中的字符,和外部展示情形下,我们不可能进行对没一个可展示的字符进行对象的创建,也即不可能使得每个字符成为一个完全独立的对象,而应该是将字符作为内部对象,进行共享,而外部展示状态则是作为外部状态,这才是享元模式的最佳解释!!!,这样就可尽可能的减少对象使用的代价!!!

参与者:

FlyWight:描述一个借口,通过该接口可以接受并做用与外部状态

ConcreteFlyWight:实现FlyWeight接口,有内部状态则开辟空间,该对象必须是可共享的,独立于外部实现场景

UnsharedConcreteFlyWeight:并非所有FlyWeight都是可共享的,UnsharedConcreteFlyWeight是FlyWeight的子类,接受ConcreteFlyWeight作为其子节点,实现外部状态

Client:调用FlyWeight,但应该有FlyWeightFactory进行FlyWeigth相关类的创建,删除等等操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世纪殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值