一、应用场景
需求:要建立PC版电商网站、小程序版的电商网站、App版的电商网站。
措施:将代码复制粘贴,根据用户的不同需求,定制化的进行修改、开发。
存在问题:
解决方案:
总结:当系统中大量使用某些相同或者相似的对象,这些对象会消耗大量的资源,并且这些对象剔除外部状态后都可以通过同一个对象来替代,这时,我们可以使用享元设计模式来解决。
享元和单例模式的区别:以共享单车为例,如果是单例模式,一座城市就只有一辆小黄车。享元模式是一座城市投放几万量小黄车供几千万人使用,避免资源的浪费。
享元模式运用共享技术有效的支持大量细粒度的对象;
享元模式有池的概念,单例没有。
享元模式有内部状态、外部状态之分,单例没有。
享元模式的uml图如下:
二、代码
public abstract class FlyWeightBike
{
//内部状态:BikeID、State(1表示骑行中,0表示使用中)、
//外部状态:骑车子的用户
//方法:骑行、锁车
public string BikeID { get; set; }
public int State { get; set; }
public abstract void Ride(string userName);
public abstract void Back(string userName);
}
public class YellowBike : FlyWeightBike
{
public YellowBike(string id)
{
this.BikeID = id;
}
public override void Back(string userName)
{
this.State = 0;
Console.WriteLine("用户" + userName + "正在归还,ID是" + this.BikeID + "的自行车");
}
public override void Ride(string userName)
{
this.State=1;
Console.WriteLine("用户"+userName+"正在骑行,ID是"+this.BikeID+"的自行车");
}
}
public class BikeFactory
{
List<FlyWeightBike> bikePool = new List<FlyWeightBike>();
public BikeFactory()
{
for (int i = 0; i < 3; i++)
{
bikePool.Add(new YellowBike(i.ToString()));
}
}
public FlyWeightBike GetBike()
{
for (int i = 0; i < bikePool.Count; i++)
{
if (bikePool[i].State==0)
{
return bikePool[i];
}
}
return null;
}
}
BikeFactory bikeFactory = new BikeFactory();
FlyWeightBike flyWeightBike= bikeFactory.GetBike();
flyWeightBike.Ride("张三");
flyWeightBike.Back("张三");
FlyWeightBike flyWeightBike1 = bikeFactory.GetBike();
flyWeightBike1.Ride("李四");
FlyWeightBike flyWeightBike2 = bikeFactory.GetBike();
flyWeightBike2.Ride("王五");
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。