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

  • 相关阅读:
    Hadoop入门
    Redis缓存分布式高可用架构原理
    ES分布式搜索引擎架构原理
    Java锁,多线程与高并发,JUC并发包
    图算法--拓扑序列
    数据结构--数组模拟队列
    数据结构--数组模拟栈
    数据结构--数组模拟双链表
    数据结构--数组模拟单链表
    基础算法--双指针
  • 原文地址:https://www.cnblogs.com/shadoll/p/14312489.html
Copyright © 2011-2022 走看看