设计模式笔记(二十二) —— 享元模式

享元模式(Flyweight):运用共享技术有效地支持大量细粒度的对象。享元模式可以避免大量相似类的开销。在程序设计中,有时需要生成大量细粒度的类实现来表示数据。如果能发现这些实例除了几个参数外基本上都是相同的有时就能够大幅度地减少需要实例化的类的数量。如果能把那些参数移到类实例的外面,在方法调用时将它们传递进来,就可以通过共享大幅度地减少单个实例的数目。 

  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. namespace StuDesignMode.Fryweight
  5. {
  6.     abstract class AbsFlyweight
  7.     {
  8.         public abstract void Operation(int extrinsicstate);
  9.     }
  10.     class ConcreteFlyweight : AbsFlyweight
  11.     {
  12.         public override void Operation(int extrinsicstate)
  13.         {
  14.             Console.WriteLine("具体Flyweight:"+ extrinsicstate);
  15.         }
  16.     }
  17.     class UnsharedConcreteFlyweight : AbsFlyweight
  18.     {
  19.         public override void Operation(int extrinsicstate)
  20.         {
  21.             Console.WriteLine("不共享的具体Flyweight:" + extrinsicstate);
  22.         }
  23.     }
  24.     class FlyweightFactory
  25.     {
  26.         private Hashtable flyweights = new Hashtable();
  27.         public FlyweightFactory()
  28.         {
  29.             flyweights.Add("x"new ConcreteFlyweight());
  30.             flyweights.Add("y"new ConcreteFlyweight());
  31.             flyweights.Add("z"new ConcreteFlyweight());
  32.         }
  33.         public AbsFlyweight GetFlyweight(string key)
  34.         {
  35.             return (AbsFlyweight)flyweights[key];
  36.         }
  37.     }
  38.     class ClientTest
  39.     {
  40.         static void Main(string[] ages)
  41.         {
  42.             int ex = 22;
  43.             FlyweightFactory f = new FlyweightFactory();
  44.             AbsFlyweight fx = f.GetFlyweight("x");
  45.             fx.Operation(--ex);
  46.             AbsFlyweight fy = f.GetFlyweight("y");
  47.             fy.Operation(--ex);
  48.             AbsFlyweight fz = f.GetFlyweight("z");
  49.             fz.Operation(--ex);
  50.             UnsharedConcreteFlyweight sh = new UnsharedConcreteFlyweight();
  51.             sh.Operation(--ex);
  52.             Console.WriteLine();
  53.         }
  54.     }
  55. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值