• 享元


    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}
  • 相关阅读:
    ASP.NET Core 2.1 Web API + Identity Server 4 + Angular 6 + Angular Material 实战小项目视频
    .NET Core TDD 前传: 编写易于测试的代码 -- 单一职责
    学习Identity Server 4的预备知识 (误删, 重补)
    .NET Core TDD 前传: 编写易于测试的代码 -- 全局状态
    .NET Core TDD 前传: 编写易于测试的代码 -- 依赖项
    .NET Core TDD 前传: 编写易于测试的代码 -- 构建对象
    .NET Core TDD 前传: 编写易于测试的代码 -- 缝
    SpringBoot入门教程(十)应用监控Actuator
    SpringBoot入门教程(九)定时任务Schedule
    SpringBoot入门教程(八)配置logback日志
  • 原文地址:https://www.cnblogs.com/tommyli/p/1228215.html
Copyright © 2020-2023  润新知