C# 设计模式-享元模式

一.介绍  

  享元模式(Flyweight Pattern)。属于结构型模式。运用共享技术有效地支持大量细粒度的对象。

二.实现

  当我们需要重复使用一个对象的时候,如果重复创建对象,会让内存消耗越来越大。能不能创建了第一次之后,如果需要再次使用,再直接使用之前已经创建的对象呢。让一个对象可以共享,享元模式就是实现这样的功能。

//抽象享元角色
public abstract class Flyweight
{
   //参数是享元的外部状态,随环境变化而变化
public abstract void Operation(int extrinsicState); } //具体享元角色 public class ConcreteFlyweightA : Flyweight { public override void Operation(int extrinsicState) { Console.WriteLine("ConcreteFlyweightA" + extrinsicState); } } public class ConcreteFlyweightB : Flyweight { public override void Operation(int extrinsicState) { Console.WriteLine("ConcreteFlyweightB" + extrinsicState); } } //享元工厂角色 public class FlyweightFactory {
  //享元内部状态,不随环境变化而变化
private Hashtable flyweights = new Hashtable(); public FlyweightFactory() { flyweights.Add("A", new ConcreteFlyweightA()); flyweights.Add("B", new ConcreteFlyweightA()); } public Flyweight GetFlyweight(string intrinsicState) { if (flyweights.ContainsKey(intrinsicState)) { return flyweights[intrinsicState] as Flyweight; } return null; } } public static void Main(string[] args) { //初始化享元工厂 var factory = new FlyweightFactory(); //判断工厂是否有A,有的话可以直接使用 var flyweight1 = factory.GetFlyweight("A"); if (flyweight1 != null) { flyweight1.Operation(1); } //判断工厂是否有B,有的话可以直接使用 var flyweight2 = factory.GetFlyweight("B"); if (flyweight2 != null) { flyweight2.Operation(1); } }

 三.总结

  优点:

  1.降低了系统中对象的数量,从而降低了系统中细粒度对象给内存带来的压力。

  缺点:

  1.为了使对象可以共享,需要将一些状态外部化,这使得程序的逻辑更复杂,使系统复杂化。

  2.享元模式将享元对象的状态外部化,而读取外部状态使得运行时间稍微变长。

posted @ 2021-01-22 23:17  shine声  阅读(272)  评论(0编辑  收藏  举报