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

  • 相关阅读:
    Centos命令参数自动补全
    使用pigz快速压缩TB级别文件
    yum使用http代理,wget使用http代理
    "Non Zero Exit Status” R 3.0.1 'XML' and 'RCurl' " in bioconductor while installing packages
    centos 6.5 编译 segemehl 出错的解决方法
    centos下raid详解
    CentOS6.5环境安装VMware虚拟机----解决启动虚拟机时could not open /dev/vmmon: No such file or directory的问题
    CentOS 6.5升级Firefox浏览器
    EditPlus正则表达式替换字符串详解
    makefile完毕,编译链接通过
  • 原文地址:https://www.cnblogs.com/shadoll/p/14312489.html
Copyright © 2011-2022 走看看