享元

Terrylee,2006年3月

摘要:面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题。但是在某些情况下,对象的数量可能会太多,从而导致了运行时的代价。那么我们如何去避免大量细粒度的对象,同时又不影响客户程序使用面向对象的方式进行操作?

本文试图通过一个简单的字符处理的例子,运用重构的手段,一步步带你走进Flyweight模式,在这个过程中我们一同思考、探索、权衡,通过比较而得出好的实现方式,而不是给你最终的一个完美解决方案。

主要内容:

1. Flyweight模式解说

2..NET中的Flyweight模式

3.Flyweight模式的实现要点

……

概述

面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题。但是在某些情况下,对象的数量可能会太多,从而导致了运行时的代价。那么我们如何去避免大量细粒度的对象,同时又不影响客户程序使用面向对象的方式进行操作?

意图

运用共享技术有效地支持大量细粒度的对象。[GOF 《设计模式》]
结构图

代码

 1namespace Bll
 2{
 3    public class Car
 4    {
 5        public string Body;
 6        public string Wheel;
 7        public string Engine;
 8        public string Color;
 9
10        public Car(string body, string wheel, string engine, string color)
11        {
12        }

13    }

14
15    public class FlyWeightCar
16    {
17        public String Brand;
18
19        private Car car;
20        public Car Car
21        {
22            get return car; }
23            set { car = value; }
24        }

25    }

26
27    public class FlyWeightFactory
28    {
29        private static FlyWeightCar car;
30        private static Hashtable table = new Hashtable();
31        public static FlyWeightCar CreateInit(string body, string wheel, string engine, string brand, string color)
32        {
33            if (table[brand] != null)
34            {
35                car = (FlyWeightCar)table[brand];
36            }

37            else
38            {
39                car = new FlyWeightCar();
40                car.Brand = brand;
41                car.Car = new Car(body, wheel, engine, color);
42                table.Add(brand, car);
43            }

44            return car;
45        }

46    }

47}
posted @ 2008-06-23 15:13  李占卫  阅读(246)  评论(0编辑  收藏  举报