共同的天空(FlyWeight)
来源:互联网 发布:mac怎么重装系统 编辑:程序博客网 时间:2024/04/28 04:26
很多情况下.大量的类似之处使得我们不得不为重复的数据使用少的可怜的内存.这样
的情况很糟糕.既然如此.我们必须找到一个好的办法.把那些可能重复的数据统一管理
这样是在合理不过的事情了.好的..我们应该从如下几个方面来考虑.首先要找出对象之
间的共同之处.这部分是可以共享.那么就需要封装到一个类中.那么剩下的不能共享的
就只好封装到另外的类中.换句话说.就是把对象的粒度扩大.让FlyWeight来控制原本
可能多个小粒度的对象.并把可共享的地方共享.形成统一管理.而可共享的部分必须
动态产生.显然是要用到Factory模式.这也就是FlyWeight很多情况都利用了厂模式.
并且工厂维护着一个共享池.这个池的作用就是为了使得.客户程序能充实际内存中
读取共享数据.如果客户搜索到数据.那么就返回一个共享对象.如果没有找到.那么就
加入到这个共享池中.
abstract class Flyweight
{
abstract public void Execute( OtherData oData );
}
下面考虑一个可能遇到的问题.假如某个出版社.的数据库是这样的
书号 作者 出版日期 价格
那么这里除了书号以外都又可能出现很大的重复.为了使内存减小投入我们可以考虑使用
FlyWeight模式.
public class Book{
private int bookNum;
private string Author;
private DateTime pubDate;
private float price;
public void Execute(){}
}
由此可以看出.Book中的大部分数据都又可能重复.那样会浪费很多的内存.那么我们来进行又效
的共享管理.
public class AuthorFlyWeight : FlyWeight{
private string author;
public string Author{
get{return author;}
set{author=value;}
}
}
public class pubDateFlyWeight : FlyWeight{
private DateTime pubDate;
public DateTime PubDate{
get{return pubDate;}
set{pubDate=value;}
}
}
public class PriceFlyWeight : FlyWeight{
private float price;
public float Price{
get{return price;}
set{price=value;}
}
}
//抽象工厂
abstract class FlyweightFactory{
//存储数据
protect Hashtable pool = new Hashtable();
public abstract Flyweight getFlyweight(string key){
}
}
public class AuthorFactory:FlyweightFactory{
public override Flyweight getFlyweight(string key){
AuthorFlyWeight reValue;
reValue = (AuthorFlyWeight)pool.get(key);
if(reValue == null) {
reValue = new AuthorFlyWeight();
pool.put(key,reValue);
}
return reVale;
}
}
后面与之类似..那么FlyWight模式我就介绍到这里....
- 共同的天空(FlyWeight)
- 让我们共同学习共同进步(资料出售,撑起自己的一片天空)
- 建一座安全的“天空城” ——揭秘腾讯WeTest如何与祖龙共同挖掘手游安全漏洞
- 天空穹,天空面,天空盒的学习
- Flyweight模式 的学习
- 香草的天空
- 云和天空的故事
- 小草的天空
- 一个人的天空
- 美丽的天空
- 缘分的天空
- 雨天 阴冷的天空
- IN天空的思考
- 我的天空
- 飞不出的缘分天空
- 泛黄的天空
- 断背山的天空
- 我的天空
- 一脚踢掉NEW
- 记忆点(Memento)
- 我的代理人(Proxy)
- 旅行中的状态(state)
- 孪生兄弟(Prototype)
- 共同的天空(FlyWeight)
- 让你插上翅膀(Decorator)
- 魔力拼图(Builder)
- 统一求存(Facade)
- 局部神经(Composite)
- 魔法牌里的模式(Bridge)
- 前人栽树后人乘凉(Template)
- 随着变化而变化(Observer)
- 执行方案(Command)