开发多用户注册使用的网站---享元模式
2015-02-25 13:34
218 查看
我们在实际项目开发过程中,肯定遇到以下类似的情况:专为小型公司注册并显示的公司信息,提供不同样式的显示方式;我们不会为每个注册的账户的公司都开发出一套量身打造的网站,而且才用共享技术的方式来实现核心技术、其他变化部分采用外部变量的方式传入进行操作。这就是今天我们要讲的享元模式。
什么是享元模式?运用共享的技术有效地支持大量细粒级的对象。换种说法,就是减少创建对象的数量,减少系统开销。因为我们的硬件资源是有限的;
代码部分:
Flyweight类是超类,是具体享元类的接口;这里要将外部的状态传入并可进行处理;
abstract class Flyweight
{
public abstract void Operation(int extrinsicstate);
}
ConcreteFlyweight类为具体的享元类;
class ConcreteFlyweight:Flyweight
{
public override void Operation(int extrinsicstate)
{
Console.WriteLine("具体的享元对象:"+extrinsicstate);
}
}
我们一定要预留不享元的情况,方便其他的操作;
class UnshareConcreteFlyweight:Flyweight
{
public override void Operation(int extrinsicstate)
{
Console.WriteLine("不共享具体的享元对象:"+extrinsicstate);
}
}
需要用一个工厂类来管理我们的享元对象;存在则获取,不存在则创建;这样做可以减少享元对象的个数,减少存储的开销;
class FlyweightFactory
{
private Hashtable flyweights=new Hashtable();
public FlyweightFactory()
{
//初始化享元的对象,我们也可以不用初始化,在获取数据的时候如果为null,则自动创建添加
flyweights.Add("x",new ConcreteFlyweight());
flyweights.Add("Y",new ConcreteFlyweight());
flyweights.Add("z",new ConcreteFlyweight());
}
public Flyweight GetFlyweight(string key)
{
//如果我们没有在初始化享元对象,则不存在 采用添加的方式
/*
if(!flyweights.ContainsKey(key))
{
flyweights.Add(key,new ConcreteFlyweight());
}
*/
return ((Flyweight)flyweights[key]);
}
}
客户端比较简单,只是要注意我们这个地方有个外部的状态。我们在实际上区分不同的显示方式则根据外部变量来进行的。例如:在注册并显示不同公司的信息的时候,我们可以根据我们系统申请的ID(唯一值,就是外部状态)来传入显示公司的信息,并根据ID设定好的样式格式显示出来。
//客户端
static void Main(string[] arg)
{
//代码外部状态,这个就是变化部分
int extrinsicstate =100;
FlyweightFactory fly=new FlyweightFactory();
Flyweight fx=fly.GetFlyweight("x");
fx.Operation(extrinsicstate--);
Flyweight fx=fly.GetFlyweight("y");
fx.Operation(extrinsicstate--);
Flyweight fx=fly.GetFlyweight("z");
fx.Operation(extrinsicstate--);
UnshareConcreteFlyweight ux=new UnshareConcreteFlyweight();
ux.Operation(extrinsicstate--);
}
什么是享元模式?运用共享的技术有效地支持大量细粒级的对象。换种说法,就是减少创建对象的数量,减少系统开销。因为我们的硬件资源是有限的;
代码部分:
Flyweight类是超类,是具体享元类的接口;这里要将外部的状态传入并可进行处理;
abstract class Flyweight
{
public abstract void Operation(int extrinsicstate);
}
ConcreteFlyweight类为具体的享元类;
class ConcreteFlyweight:Flyweight
{
public override void Operation(int extrinsicstate)
{
Console.WriteLine("具体的享元对象:"+extrinsicstate);
}
}
我们一定要预留不享元的情况,方便其他的操作;
class UnshareConcreteFlyweight:Flyweight
{
public override void Operation(int extrinsicstate)
{
Console.WriteLine("不共享具体的享元对象:"+extrinsicstate);
}
}
需要用一个工厂类来管理我们的享元对象;存在则获取,不存在则创建;这样做可以减少享元对象的个数,减少存储的开销;
class FlyweightFactory
{
private Hashtable flyweights=new Hashtable();
public FlyweightFactory()
{
//初始化享元的对象,我们也可以不用初始化,在获取数据的时候如果为null,则自动创建添加
flyweights.Add("x",new ConcreteFlyweight());
flyweights.Add("Y",new ConcreteFlyweight());
flyweights.Add("z",new ConcreteFlyweight());
}
public Flyweight GetFlyweight(string key)
{
//如果我们没有在初始化享元对象,则不存在 采用添加的方式
/*
if(!flyweights.ContainsKey(key))
{
flyweights.Add(key,new ConcreteFlyweight());
}
*/
return ((Flyweight)flyweights[key]);
}
}
客户端比较简单,只是要注意我们这个地方有个外部的状态。我们在实际上区分不同的显示方式则根据外部变量来进行的。例如:在注册并显示不同公司的信息的时候,我们可以根据我们系统申请的ID(唯一值,就是外部状态)来传入显示公司的信息,并根据ID设定好的样式格式显示出来。
//客户端
static void Main(string[] arg)
{
//代码外部状态,这个就是变化部分
int extrinsicstate =100;
FlyweightFactory fly=new FlyweightFactory();
Flyweight fx=fly.GetFlyweight("x");
fx.Operation(extrinsicstate--);
Flyweight fx=fly.GetFlyweight("y");
fx.Operation(extrinsicstate--);
Flyweight fx=fly.GetFlyweight("z");
fx.Operation(extrinsicstate--);
UnshareConcreteFlyweight ux=new UnshareConcreteFlyweight();
ux.Operation(extrinsicstate--);
}
相关文章推荐
- 使用Eclipse+MyEclipse+MySql开发一个用户注册登录系统
- DWCS6搭建jsp开发环境及使用ajax实现用户注册(基于文件)
- 使用IntelliJ IDEA开发SpringMVC网站(四)用户管理
- 使用IntelliJ IDEA开发SpringMVC网站(四)用户管理
- ASP.NET MVC5 网站开发实践(二) Member区域 - 用户部分(1)用户注册
- 网站后端.Flask.实战-社交博客开发-注册用户?
- 某公司要开发”天天灌水论坛”,请使用面向对象的思想,设计注册用户信息
- 使用IntelliJ IDEA开发SpringMVC网站(四)用户管理
- 使用qq邮箱SMTP服务器来为你的网站实现用户注册的邮件回复功能
- 使用IntelliJ IDEA开发SpringMVC网站(四)用户管理
- ASP.NET MVC5 网站开发实践(二) Member区域 - 用户部分(1)用户注册
- 【JavaMail】(2)JavaMail的一个案例:用户在网站上注册完成后给用户发一封邮件, 且需要用户通过邮件激活后才可以使用。
- 使用VTEditor软件快速开发网站系列教程二 注册、登陆
- ASP.NET MVC5网站开发用户注册(四)
- ASP.NET MVC5网站开发用户注册(四)
- 使用Eclipse+MyEclipse+MySql开发一个用户注册登录模块
- ssh_crm:客户行业统计功能,使用easyUI,开发用户列表,用户注册,用户登陆,解决json字符串问题
- 使用IntelliJ IDEA开发SpringMVC网站(四)用户管理
- 使用IntelliJ IDEA开发SpringMVC网站(四)用户管理
- 网站开发技巧, 使用byte[]持久化用户个性设置