重温设计模式(六)—— 阶段总结一

1.写在前面的

在文章开始之前,先写一些废话,不知不觉把重温设计模式写完了五篇。

下面的文章,算是对以上五篇文章的一个阶段性总结和反省。

首先,我得特别感谢winter-cn不厌其烦地指出我在设计模式应用中的一个又一个错误,如果没有他,很多东西我还是会继续地错下去。

另外,也感谢博客园众多园友对我的鼓励,让我有勇气再次写下去。

2.步入正题1——享元模式

享元模式运用共享技术有效地支持了大量细粒度的对象,解决了大量对象造成的内存开销问题。

何时采用享元模式:

在这里我补充两个很重要的概念:内蕴状态和外蕴状态。内蕴状态是共享对象中被所有对象所共享的东西,而外蕴状态是由外部调用者传进去的东西。

我们这里就借助Word文档的例子来说明这两个概念,转了一圈,再次回到GOF:

在一篇文章中,一共只有26个字母,但是这篇文章却可能有几万个字。那么这个时候,我们就可以用享元模式来解决问题。 

这个时候什么是内蕴状态?什么是外蕴状态?

内蕴状态被所有调用者所共享,也就是那26个字母。

而外蕴状态呢?就是每个字符所不可能不同的字体。看清楚,是可能不同。

如果写成示例代码:

class Character
{
  char c;
  Font f;
  private List<Font> fontList;

  public Font F
  {
    set
    {
      int i = 0;
      for (i = 0; i < fontList.Count; i++)
      {
        if (fontList[i].Equals(value))
        {
          this.f = fontList[i];
          break;
        }
      }
      fontList.Add(value);
      f = value;
    }
  }
}
class Font
{
  string fontName;
  string color;
  int size;
  // and so on;
}

时间: 2024-10-31 19:23:02

重温设计模式(六)—— 阶段总结一的相关文章

重温设计模式(四)——工厂模式

1.写在前面 这篇文章是我酝酿了近一个月的时间写出来的,我想在第一个模式上就写出工厂模式,却一直推迟到现在. 工厂模式,看似很容易,很常见,但是学习设计模式两年,我至今仍未能真正地充分理解工厂模式的意图.工厂模式好在哪,他究竟解决了什么问题,工厂还是不工厂,困扰了我整整两年. 从无模式,到为模式而模式,在到今天的重温设计模式.我已经记不清大多数模式的样式了,只记得一系列的设计原则,然后去思考模式的综合.但是工厂模式,至今我仍然难以理解. 写出这篇文章,更多的目的是为了抛砖引玉,希望大家能够多多指

重温设计模式(二)——桥接模式(Bridge)

一.从树谈起 基本上所有人都知道树这个概念. 稍微深究.NET本质的人会懂得,.NET有个对象树. 学习ASP.NET的人肯定会知道,Web上有个控件树. 哪怕是只学习过数据结构应付考试的大学生也会知道Tree这个概念. 二.把需求扩展成树 举个我们最常用的Photoshop做例子. 在Photoshop中,有许多图形工具,比如星星,比如方形,再比如圆形等等. 在Photoshop中,不用多说,也有很多种颜色供我们选择. 于是就产生了,红色的星星,绿色的星星.红色的方形,绿色的方形等等. 看看所

重温设计模式(七)——模板方法模式

1.摘要 在本文中,我们来对模板方法模式做一个全面的了解. 2.求职简讯 呵呵,如果各位不介意,希望在这里做一个求职的广告. 语言方向:Java/C#/VB,语言熟悉程度降序排列. 求职方向:开发,测试等与IT相关工作. 月薪要求:1000元以上 工作地点:北京 3.开门见山 模板方法,定义一个操作中算法骨架,而将一些步骤延迟到子类中去实现. 让我们先来看看模板方法的示意图: 这个模式的本身很容易理解,我就不自己去画了. 我们看到这个模式的关键在于父类中的TemplateMethod()方法,正

重温设计模式(三)——职责链模式(chain of responsibility)

一.写在前面的 这么多的设计模式,我觉得职责链是我第一次看上去最简单,可是回想起来却又最复杂的一个模式. 因此,这个文章我酝酿了很久,一直也没有胆量发出来,例子也是改了又改,可是仍然觉得不够合理.所以希望各位多多指教. 二.什么是链 文章伊始,先让我们了解这个最基本的概念,什么是链. 我给链下了这样的定义: 1.链是一系列节点的集合. 2.链的各节点可灵活拆分再重组. 三.何为职责链 职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连成一条链,并沿着

重温设计模式(五)——我所理解的“抽象工厂”

在各位读这篇文章之前,我给大家一个提醒,我的文章也许称不上一个设计模式类的文章,只能算是自己在项目中的一个设计总结,在这里,我很欢迎大家和我一起讨论.但是同时我想说,我写博客的目的本身就是希望我的经验可以提醒他人,但是如果造成了一种相反的影响,那就违背我的初衷了,所以希望大家对我的观点思考,思考,再思考!另外,感谢Jake.NET,装配脑袋,横刀天笑等对我的鼓励. 1.代码引子 让我们由一段代码引出我们的这篇文章. 相信每个人,无论是B/S,还是C/S.都无可避免地要去和数据库打交道.那么这样的

重温设计模式(一)——享元模式(Flyweight)

一.世间万物皆为对象 从大学校园中拦住一个软件工程专业的学生,问他,什么是面向对象.他会告诉你,世间万物皆是对象. 世界之大,何止万物.上至宇宙星辰,下至细菌病毒.皆为对象. 女孩,吐气如兰,仍留淡淡余香. 男孩,闭眼陶醉,不亦乐乎. 二.对象爆炸 呼吸之间,分子无数. 每个分子皆为一对象,恐万台服务器之矩阵亦无可容. 奈何乎? GOF 曰:享元模式! 三.何为享元模式 Flyweight : 次最轻量级的拳击选手.即粒度最小. 因此,享元模式的目的是采用共享技术解决大量细粒度对象的爆炸问题.

12年网站经验总结SEO外链的六个阶段

早在1998年就开始做网页,这12多年里,见证着整个互联网的变迁.今天先来简单总结一下做网站的这些年里,网站链接的变化过程.供各位SEOer检查自身在外链工作中所处位置. 第一阶段 最早年代的链接,是纯真的链接,那时候引擎还没有基于链接的算法,所以网站链接到其它站点,是单纯为了使浏览者受益.渐渐地,引擎开始通过这点,来区分哪些站点是高质量的,给予高质量的优先排名. SEOer们也开始意识到引擎的变化,于是,SEOer们想尽方法,使每个建立的站点都链接到自己的网站上,不管这些链接的好与坏,不管这些

外媒讽刺任天堂游戏机骗钱的六个必经阶段

(编译/流川枫)纵观目前的家用游戏机和网络游戏市场,似乎都存在这样一种现象,就是开发商们为了尽量延长产品的生命周期,都采取 "挤膏药"似的市场策略,在新产品上市前对旧产品进行小幅更新修补或分阶段放出内容,以期达到最大限度榨干玩家钱包.留住玩家的目的.近日,国外媒体就以任天堂的游戏机为例,对此种模式进行了讽刺.以下为原文编译: 再过几个月,任天堂就将发布它的新款3DS掌上游戏机.这款备受期待的新机是否会和老款DS一样成功目前还无从知晓,不过有一点可以肯定的是,任天堂将会延续自SNES开始

Android开发学习路线的七大阶段_Android

看了专业的培训机构的课程大纲,才知道,自己学习android的路途才刚刚开始!特此整理分享一下,希望能帮到那些准备学习android开发,或者正在学习android开发,但是又没有找到明确路线的童鞋们!(PS:特此声明,这篇文章不是给培训机构做广告哈,本人也是在自学android开发!!) 第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环. 2.String和StringBuffer的使用.正则表达式. 3.面向对象的抽象,封装,继承,多态,类与对象,对象初始化和回收: