码迷,mamicode.com
首页 > Web开发 > 详细

开发多用户注册使用的网站---享元模式

时间:2015-02-25 17:15:00      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:系统架构   设计模式   

        我们在实际项目开发过程中,肯定遇到以下类似的情况:专为小型公司注册并显示的公司信息,提供不同样式的显示方式;我们不会为每个注册的账户的公司都开发出一套量身打造的网站,而且才用共享技术的方式来实现核心技术、其他变化部分采用外部变量的方式传入进行操作。这就是今天我们要讲的享元模式。

      什么是享元模式?运用共享的技术有效地支持大量细粒级的对象。换种说法,就是减少创建对象的数量,减少系统开销。因为我们的硬件资源是有限的;

技术分享

代码部分:

 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--);
	
}


      

开发多用户注册使用的网站---享元模式

标签:系统架构   设计模式   

原文地址:http://blog.csdn.net/sevenkj/article/details/43936831

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!