using System;
using System.Collections; namespace ConsoleApplication5
{
class Program
{
/// <summary>
/// 在软件开发过程,如果我们需要重复使用某个对象的时候,
/// 如果我们重复地使用new创建这个对象的话,这样我们在内存就需要多次地去申请内存空间了,
/// 这样可能会出现内存使用越来越多的情况,这样的问题是非常严重,然而享元模式可以解决这个问题,
/// 下面具体看看享元模式是如何去解决这个问题的。
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
CharactorFactory factory = new CharactorFactory(); // Charactor "A"
CharactorA ca = (CharactorA)factory.GetCharactor("A");
ca.SetPointSize();
ca.Display(); // Charactor "B"
CharactorB cb = (CharactorB)factory.GetCharactor("B");
cb.SetPointSize();
cb.Display(); // Charactor "C"
CharactorC cc = (CharactorC)factory.GetCharactor("C");
cc.SetPointSize();
cc.Display(); }
} // 字符工厂(负责创建和管理享元对象)
public class CharactorFactory
{
// Fields
private Hashtable charactors = new Hashtable(); // Constructor
public CharactorFactory()
{
charactors.Add("A", new CharactorA());
charactors.Add("B", new CharactorB());
charactors.Add("C", new CharactorC());
} // Method
public Charactor GetCharactor(string key)
{
Charactor charactor = charactors[key] as Charactor; if (charactor == null)
{
switch (key)
{
case "A": charactor = new CharactorA(); break;
case "B": charactor = new CharactorB(); break;
case "C": charactor = new CharactorC(); break;
//
}
charactors.Add(key, charactor);
}
return charactor;
}
} /// <summary>
/// 字符特殊类,提供具体享元类具有的方法
/// </summary>
public abstract class Charactor
{
//Fields
protected char _symbol;
protected int _width;
protected int _height;
protected int _ascent;
protected int _descent;
protected int _pointSize; //Method
public abstract void SetPointSize(int size);
public abstract void Display();
} /// <summary>
/// 字符A
/// </summary>
public class CharactorA : Charactor
{
// Constructor
public CharactorA()
{
this._symbol = 'A';
this._height = ;
this._width = ;
this._ascent = ;
this._descent = ;
this._pointSize = ;
} //Method
public override void SetPointSize(int size)
{
this._pointSize = size;
} public override void Display()
{
Console.WriteLine(this._symbol +
"pointsize:" + this._pointSize);
}
} /// <summary>
/// 字符B
/// </summary>
public class CharactorB : Charactor
{
// Constructor
public CharactorB()
{
this._symbol = 'B';
this._height = ;
this._width = ;
this._ascent = ;
this._descent = ;
this._pointSize = ;
} //Method
public override void SetPointSize(int size)
{
this._pointSize = size;
} public override void Display()
{
Console.WriteLine(this._symbol +
"pointsize:" + this._pointSize);
}
} /// <summary>
/// 字符C
/// </summary>
public class CharactorC : Charactor
{
// Constructor
public CharactorC()
{
this._symbol = 'C';
this._height = ;
this._width = ;
this._ascent = ;
this._descent = ;
this._pointSize = ;
} //Method
public override void SetPointSize(int size)
{
this._pointSize = size;
} public override void Display()
{
Console.WriteLine(this._symbol +
"pointsize:" + this._pointSize);
}
} }

12.享元模式(Flyweight Pattern)的更多相关文章

  1. 二十四种设计模式:享元模式(Flyweight Pattern)

    享元模式(Flyweight Pattern) 介绍运用共享技术有效地支持大量细粒度的对象. 示例有一个Message实体类,某些对象对它的操作有Insert()和Get()方法,现在要运用共享技术支 ...

  2. 乐在其中设计模式(C#) - 享元模式(Flyweight Pattern)

    原文:乐在其中设计模式(C#) - 享元模式(Flyweight Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 享元模式(Flyweight Pattern) 作者:weba ...

  3. Java享元模式(Flyweight Pattern)

    享元模式(Flyweight Pattern)主要用于减少创建的对象数量,并减少内存占用并提高性能. 这种类型的设计模式属于结构模式,因为该模式提供了减少对象计数的方法,从而改善应用的对象结构. 享元 ...

  4. 设计模式-11享元模式(Flyweight Pattern)

    1.模式动机 在面向对象程序设计过程中,有时会面临要创建大量相同或相似对象实例的问题.创建那么多的对象将会耗费很多的系统资源,它是系统性能提高的一个瓶颈. 享元模式就是把相同或相似对象的公共部分提取出 ...

  5. 设计模式系列之享元模式(Flyweight Pattern)——实现对象的复用

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  6. 七个结构模式之享元模式(Flyweight Pattern)

    定义: 运用共享技术对大量细粒度对象的复用,这要求这些对象都很相似,状态变化很小.将这些对象的内部状态和外部状态进行区分,对于内部状态相同的只存储一个对象,而对不同的外部状态则采用不同的操作. 结构图 ...

  7. 享元模式(Flyweight Pattern)

    定义: 采用一个共享来避免大量拥有相同内容对象的开销.这种开销中最常见.直观的就是内存的损耗.享元模式以共享的方式高效的支持大量的细粒度对象. 享元的英文是flyweight,是一个来自体育方面的专业 ...

  8. 【UE4 设计模式】享元模式 Flyweight Pattern

    概述 描述 运用共享技术有效地支持大量细粒度对象的复用.系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用. 由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻 ...

  9. 享元模式<Flyweight Pattern>

    1.What-是什么?   享元模式是一种轻量级的结构型模式.旨在以共享的方式高效的支持大量的细粒度对象的复用.要求能够共享的对象必须是细粒度对象,这些对象比较相似,状态变化小. 2.Why-为什么? ...

随机推荐

  1. jQuery学习笔记 - 基础知识扫盲入门篇

    jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...

  2. (转)android图片压缩总结

    原文地址:http://blog.csdn.net/cherry609195946/article/details/9264409 一.图片的存在形式 1.文件形式(即以二进制形式存在于硬盘上)2.流 ...

  3. 如何给zencart安装image handler插件?

    以下内容均为个人的工作总结,有错误的理解都很正常,所以提醒您,可以参考,但是由此造成的一切后果,本人概不负责. 1 去zencart官网下载一个插件包(注意版本是否匹配相应的zencart版本,我的是 ...

  4. VQuery选择器

    VQUery elements属性,储存选中的元素 参数 typeof的作用 字符串 class  ID tagName 函数 事件绑定 对象 直接插入 $函数 绑定事件 click方法 显示隐藏,- ...

  5. phpcms不能后台编辑模板

    刚安装的phpcms后台无法编辑模板,实际上只需要改一个系统文件的值即可 打开phpcms项目根目录下的: caches/configs/system.php 找到第20行,代码如下: 'tpl_ed ...

  6. apache2错误日志在哪,可以看到php错误

    在以下路径中 /var/log/apache2/error.log

  7. ITIL与ITSM的联系与区别

    1.ITIL(IT Infrastructure Library)是CCTA(英国国家计算机和电信局)于20世纪80年代末开发的一套IT服务管理标准库,它把英国各个行业在IT管理方面的最佳实践归纳起来 ...

  8. 转帖:如何建立与使用 Window setup project

    原文地址: http://www.codeproject.com/Articles/12548/Visual-Studio-Windows-Application-Setup-Project

  9. C#析构函数与垃圾回收

    析构函数基本语法 C# class Car { ~ Car() // destructor { // cleanup statements... } } 析构函数说明 不能在结构中定义析构函数.只能对 ...

  10. poj 2240(floyd)

    http://poj.org/problem?id=2240 题意:有些人会利用货币的不用汇率来进行套现,比如1美元换0.5英镑,而1英镑又可以换10法郎,而1法郎又可以换0.21的美元,那么经过货币 ...