Flyweight Pattern简单随笔
享元模式: 以共享的方式高效地支持大量的细粒度对象。
享元对象的状态:
1:内蕴状态(Internal State)内蕴状态存储在享元对象内部且不会随环境改变而改变。因此内蕴状态并可以共享。
2:外蕴状态(External State)。外蕴状态是随环境改变而改变的、不可以共享的状态。享元对象的外蕴状态必须由客户端保存,并在享元对象被创建之后,在需要使用的时候再传入到享元对象内部。外蕴状态与内蕴状态是相互独立的。
享元模式的应用条件:
1: 一个系统有大量的对象。
2:这些对象耗费大量的内存。
3:这些对象的状态中的大部分都可以外部化。
4:这些对象可以按照内蕴状态分成很多的组,当把外蕴对象从对象中剔除时,每一个组都可以仅用一个对象代替。
5:软件系统不依赖于这些对象的身份,换言之,这些对象可以是不可分辨的。
.NET的享元模式:
.NET中的String类型就是运用了享元模式。.NET中如果第一次创建了一个字符串对象s1,下次再创建相同的字符串s2时只是把它的引用指向s1所引用的具体对象,这就实现了相同字符串在内存中的共享。
在某些情况下,对象的数量可能会太多,从而导致了运行时的代价。那么我们如何去避免大量细粒度的对象,同时又不影响客户程序使用面向对象的方式进行操作,运用共享技术有效地支持大量细粒度的对象。
私有属性是元素特有的,可以通过传递参数来进行赋值,而公共属性则通过继承来赋予相应的值:
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace FlyWeightPatternSam
6 {
7 public abstract class Employer
8 {
9 protected string _company = "COMPANY";//公共属性
10 protected string _companyAddress = "ADDRESS";//公共属性
11
12 public abstract void SetPropertity(string name,string age);
13 public abstract void ShowInformation();
14
15 }
16 }
17
18 using System;
19 using System.Collections.Generic;
20 using System.Text;
21
22 namespace FlyWeightPatternSam
23 {
24 public class EmployerA:Employer
25 {
26 private string _name;//特有属性
27 private string _age;
28 private string _id="01";
29 public override void SetPropertity( string name, string age)
30 {//传递相应的参数来赋值
31 //throw new Exception("The method or operation is not implemented.");
32 this._age = age;
33
34 this._name = name;
35 }
36
37 public override void ShowInformation()
38 {
39 //throw new Exception("The method or operation is not implemented.");
40 Console.WriteLine(_company +" "+_companyAddress +" "+_name +" "+_id +" "+_age );
41 }
42 }
43 }
44
主要的是通过工厂来进行对象创建,当存在该对象时就取出该对象,否则抛出异常。同时,对工厂使用单件模式控制唯一性;
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace FlyWeightPatternSam
6 {
7 public class FlyweightFactory
8 {
9 private static readonly FlyweightFactory instance=new FlyweightFactory();
10 System.Collections.Generic.Dictionary<string, Employer> dictionary = new Dictionary<string, Employer>();
11
12 private FlyweightFactory()
13 {
14 dictionary.Add("01",new EmployerA());
15 dictionary.Add("02",new EmployerB());
16 dictionary.Add("03",new EmployerC());
17 }
18
19 public static FlyweightFactory Instance
20 {
21 get
22 {
23 return instance;
24 }
25 }
26
27 public Employer GetEmployer(string str)
28 {
29 Employer employer = null ;
30 try
31 {
32 employer = dictionary[str] as Employer;
33 }
34 catch(Exception ex)
35 {
36 Console.WriteLine(ex.Message);
37 }
38 return employer;
39 }
40 }
41 }
42
客户端代码如下所示:
using System.Collections.Generic;
using System.Text;
namespace FlyWeightPatternSam
{
class Program
{
static void Main(string[] args)
{
Employer employer = FlyweightFactory.Instance.GetEmployer("01");
employer.SetPropertity("jasen","24");
employer.ShowInformation();
Console.ReadLine();
employer = FlyweightFactory.Instance.GetEmployer("04");
Console.ReadLine();
employer = FlyweightFactory.Instance.GetEmployer("01");
employer.SetPropertity("jasen", "25");
employer.ShowInformation();
Console.ReadLine();
}
}
}
操作结果如下:
**************************************************************************
源代码下载:/Files/jasenkin/FlyWeightPatternSam.rar
转载于:https://www.cnblogs.com/jasenkin/archive/2010/03/17/1688249.html
Flyweight Pattern简单随笔相关推荐
- C#设计模式之十一享元模式(Flyweight Pattern)【结构型】
一.引言 今天我们要讲[结构型]设计模式的第六个模式,该模式是[享元模式],英文名称是:Flyweight Pattern.还是老套路,先从名字上来看看."享元"是不是可以这样理解 ...
- 享元模式 Flyweight Pattern
享元模式的定义为:采用一个共享来避免大量拥有相同内容对象的开销. 这种开销中最常见.直观的就是内存的损耗.享元模式以共享的方式高效地支持大量的细粒度对象. 在名字和定义中都体现了共享这个核心概念,那么 ...
- Net设计模式实例之享元模式( Flyweight Pattern)
一.享元模式简介(Brief Introduction) 享元模式(Flyweight Pattern),运用共享技术有效支持大量细粒度的对象. Use sharing to support larg ...
- 设计模式(14)-Flyweight Pattern
一. 享元(Flyweight)模式 Flyweight在拳击比赛中指最轻量级,即"蝇量级",有些作者翻译为"羽量级".这里使用"享元模式" ...
- 第11章 享元模式(Flyweight Pattern)
第11章 享元模式(Flyweight Pattern) 原文 第11章 享元模式(Flyweight Pattern) 概述: 面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题 ...
- 享元模式(Flyweight Pattern)
一.定义 享元模式(Flyweight Pattern):结构型模式之一,运用共享技术有效地支持大量细粒度的对象. 二.UML类图 三.角色职责 抽象享元角色(IFlyweight):享元对象抽象基类 ...
- 享元模式(Flyweight Pattern)详解
https://www.cnblogs.com/amei0/p/7930013.html 享元模式(Flyweight Pattern) 定义: 采用一个共享来避免大量拥有相同内容对象的开销.这种开销 ...
- 【设计模式自习室】享元模式 Flyweight Pattern:减少对象数量
前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...
- 建造者模式(Builder Pattern)简单随笔
提供一种"封装机制"来隔离出"复杂对象的各个部分"的变化,从而保持系统中的"稳定构建算法"不随着需求改变而改变. 一.建造者模式简介 建造者 ...
最新文章
- Docker源码分析(三):Docker Daemon启动
- 微信小程序支付最容易犯的坑notify_url(支付回调)
- Matlab错误:Y must be a vector or a character array
- BZOJ 3244: [Noi2013]树的计数
- deque,list,queue,priority_queue
- JDK安装与配置(Windows 7系统)
- 把数组排列成最小的数(详解)
- WP SyntaxHighlighter 初探
- tracker服务器php,FastDFS-5.05 tracker服务器安装nginx+php
- 04-02 接口协议分析工具
- Django学习系列之ModelForm
- VALSE学习(十四):自主学习
- html js 处理元素的数据属性(data)
- 系统分析与设计:笔记整理
- 如何快速区分单模与多模光纤收发器?
- 企业即时通讯行业评测——imo VS RTX
- execv bad address
- DropdownMenu 下拉菜单的使用
- 计算机vfp题库知识,全国计算机vfp二级考试题库(超全).docx
- 感抗、容抗、阻抗 计算
热门文章
- ubuntu下docker的安装及更换镜像源
- 操作系统(十)进程通信
- Exthereum - 最新开发的以太坊客户端
- 如何构建一个分布式爬虫:理论篇
- Android Hook (1) Dexposed原理
- python字典中append_零基础入手!Python中字典与集合的使用指南
- 软件获取手机的ime权限_【手机谷歌软件下载】【安卓+iOS】老湿机最爱~免翻,获取各种“特殊”资源!...
- android中占容器比例,Android中的容器
- mysql php页面流量统计_PHP学习笔记:php网络流量统计系统
- log4js linux,如何在项目中使用log4.js的方法步骤