• 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.享元模式将享元对象的状态外部化,而读取外部状态使得运行时间稍微变长。

  • 相关阅读:
    利用Java脚本实现弹出窗口后,按确定实现跳转
    客服利用QQ实现即时聊天
    获取页面可见区域,屏幕区域的尺寸
    圆角模板百度知道
    利用javascript实现web页面刷新的方法
    论:命名空间,程序集和类
    我从少年时候就非常喜欢的诗歌:雨巷
    魔兽世界 圣骑士唯一的远程武器任务
    又想起我年少时候熟记的抒情诗致海伦
    System.Text.Encoding.UTF8 字符串和字节数组的互相转换
  • 原文地址:https://www.cnblogs.com/shadoll/p/14312489.html
Copyright © 2020-2023  润新知