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. 使用update!导致的更新时候的错误信息不显示 ruby on rails

    在图片管理里添加了校验方法之后,发现在更新的时候页面不显示校验报错的信息 class Picture < ApplicationRecord belongs_to :imageable, pol ...

  2. 剑指Offer 数值的整数次方

    题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方.   思路: 要考虑边界,0,负数   AC代码: class Solution ...

  3. Yii2.0中文开发向导——控制器(Controller)

    控制器(Controller) 本节包含以下方面的内容 基本概念 路由 默认路由 动作的参数 在动作中定义参数 从请求(request)中获取参数 独立动作 动作过滤器(Action Filters) ...

  4. TimeVal类——Live555源码阅读(一)基本组件类

    这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 这里是时间相关类的第一个部分. TimeVal类 TimeVal类定义在live555source ...

  5. TortoiseGit 添加邮箱 失败保存配置

    解决方法   将保存至改为此版本库

  6. 将 JAR 转为 EXE – EXE4J 的使用教程(第一期)(转载)

    http://www.iteknical.com/convert-jar-to-exe-phase-i-exe4j-tutorial/

  7. Postman

    Postman功能(https://www.getpostman.com/features) 主要用于模拟网络请求包 快速创建请求 回放.管理请求 快速设置网络代理 安装 下载地址:https://w ...

  8. 【云计算】docker三剑客如何支持分布式部署?

    This blog will explain how to create multi-container application deployed on multiple hosts using Do ...

  9. poj 1634

    题意:给你m个员工,和n次的查询. 每个员工有他独立的id,收入,和身高 上司的收入一定大于下属的收入,身高也是大于等于下属的. 每个公司的头头没有上司,上司的编号为0,,同时他也是收入最多身高最高的 ...

  10. Starting MySQL.The server quit without updating PID file (xxxx.pid).[FAILED]

    mysql无法正常启动,查看日志报如下异常 --07T01::.929615Z [ERROR] Fatal error: Please read "Security" sectio ...