`
giraffeql
  • 浏览: 16688 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

我们一起看元素模式

阅读更多

 

前言:
 
     第一次参加图书试读的活动,看了几遍《元素模式》的试读章节,决定把本文写成一篇导读的文章,方便感兴趣的朋友一起研读。
 
引言
 
     看到书名,首先我们会问,这是一本什么书?
     这是一本介绍设计模式的书。
     那么紧接着会好奇,我们听过单例模式,装饰模式,工厂模式。那么元素模式是什么模式?
 
概念:
 
     元素模式Elemental DesignPattern,简称EDP,是一组基础的程序设计思想,核心要义是一组面向对象的基本概念。
 
     我去,说了比没说还让人费解。更不能来点通俗易懂的说明?

     其实套用译者的比喻(参加译者序)就能很恰当地理解它——结合我们以前了解的设计模式(《Design Patterns》中的23种经典设计模式,本书简称为GoF)来说,GoF就相当于硫酸、食盐、葡萄糖等化合物,他们在特定的场景中会有特定的功能。而本文中的EDP指的是比GoF颗粒度更细致的氢、氧、硫、碳等化学元素。

     再简单的说,EDP就是比GoP更简洁的一些设计模式的总称,文中给出了16中之多。

     这16个模式是怎么来的呢?他们有什么特殊的关联吗?

          按照作者的话来说:元素模式是建立在设计空间的基础上的。设计空间的思个维度是对象、字段、方法、类型,他们按照状态划分真若干可区分的区间,形成一个超空间的坐标系。这个坐标系的二维和三维投影当然是可视化的,在二维或三维空间中,形成若干个相邻的方块。每个方块都有着明确的实际空间定位,代表着一种特定的元素。
 
     对,就是将对象、方法、字段、类型建立成一个四维坐标系,形成2^4=16个独立的空间,每个空间代表一个元素模式。
 
     我们来简单看看下面的图标。


 
          为了便于大家理解,作者先将对象和方法画成一个二维坐标。引出4个经典EDP概念。坐标上有相似和不相识两段,为了方便理解,我们可以先简单粗暴的把它们理解为“相同”和“不相同”。
 
[1] 递归:同一个对象调用同一个方法,即递归,这是大家熟知的。
[2] 委托:一个对象的一个方法调用另一个对象的另一个方法,即委托。
[3] 重定向:不同对象调用用一个方法,这就是重定向。
[4] 聚集:同一个对象中不同的方法,即为聚集。
 
          看起来好像很厉害的样子。但是他们的意义何在?我们该在什么场景中使用它们?它们的好处是什么?还会有哪些相似的概念?
 
          门捷列夫在刚发明元素周期表时也一度被人质疑或取笑,而元素周期表的发现对整个化学界的影响不言而喻。那么,我们现在所研究元素模式是否有如此深远的意义呢?我期待下文给我答复,另外也希望能解开上面提及的一连串疑问。
 
 
 
 
 
  • 大小: 18.9 KB
分享到:
评论

相关推荐

    C#23种设计模式_示例源代码及PDF

    迭代子模式: 迭代子模式可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。多 迭代子模式 个对象聚在一起形成的总体称之为聚集, 聚集对象是能够包容一组对象的容器对象。 迭代 子 模式将迭代逻辑封装到一个...

    已知线性表按顺序存于内存,每个元素都是整数,试设计把所有值为负数的元素移到全部正数值元素前边的算法 .cpp

    已知线性表按顺序存于内存,每个元素都是整数,把所有值为负数的元素移到全部正数值元素前边的算法

    GoF 的 23 种设计模式

    访问者(Visitor)模式:在不改变集合元素的前提下,为一个集合中的每个元素提供多种访问方式,即每个元素有多个访问者对象访问。 备忘录(Memento)模式:在不破坏封装性的前提下,获取并保存一个对象的内部状态,...

    CSS学习中EMMET语法、复合选择器、元素选择模式、以及背景的一些总结

    CSS学习中EMMET语法、复合选择器、元素选择模式、以及背景的一些总结,观看视频中的个人总结,创作不易,如果有问题欢迎留言咨询,大家一起学习一起进步哇

    Page-Object设计模式

    当代码封装好咯,会发现页面元素和页面逻辑是杂糅在一起页面更改一个按钮就要去代码里面找到按钮做相应的更改。那么能不能把页面元素和页面逻辑分离开来。当页面更改我就只改page类。逻辑更改就只改logic类。那么久...

    12种常用设计模式C#代码示例

    10,迭代器模式:提供一种方法,顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 11,组合模式:允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象已经...

    Java设计模式(含代码)

    Adapter:将一个类的接口转换成客户希望的另一个接口,使得原来由于接口不兼容而不能一起工作的那些类可以一起工作。 Bridge:将抽象部分与它的实现部分分离,使之可以独立变化。 Chain of Responsibility:为解除...

    长散布的核元素(LINEs)中的逆转录酶片段的鉴定和表征。

    我们使用简并引物对扩增并鉴定了rt的保守域。 序列分析表明rt片段高度异质且富含A / T碱基。 序列同一性为31.8%至99.4%。 基于序列相似性,将rt片段分为八组。 此外,在同一组克隆中,相似的终止密码子分布模式...

    二十三种设计模式【PDF版】

    那就先看设计模式引言 ! 学习 GoF 设计模式的重要性 建筑和软件中模式之异同 A. 创建模式 设计模式之 Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的...

    java 设计模式资料

    A d a p t e r模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 Bridge:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 Builder:将一个复杂对象的构建与它的表示分离,使得同样的...

    浅析java常用的设计模式(doc-23页).doc

    16、迭代子模式:迭代子模式可以顺序访问一个聚集中的元素而不必暴露聚集的内 部表象。多个对象聚在一起形成的总体称之为聚集,聚集对象是能够包容一组对象的容 器对象。迭代子模式将迭代逻辑封装到一个独立的子...

    JavaScript文档加载模式以及元素获取

    主要介绍了JavaScript文档加载模式以及元素获取,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    react-webcomponent-example:使Web组件输入元素与React Hooks一起使用的示例代码

    使Web组件输入元素与React Hooks一起使用的示例代码。 请参考以获得详尽的解释。 该项目是通过。 可用脚本 在项目目录中,可以运行: npm start 在开发模式下运行应用程序。 打开在浏览器中查看它。 如果您进行...

    jQuery 如何先创建、再修改、后添加DOM元素

    由于jQuery支持链式操作,其实就是设计模式的builder模式,所以我们可以把三个操作串在一起来执行。 首先创建一个p元素,内容包含一个a元素。 代码如下: $(‘<p><a>jQuery</a></p>’) 然后为a元素添加一个href属性 ...

    论文研究 - 在北苏拉威西省使用基于社会资本的商业模式来授权青年农业综合企业企业家

    这项研究的目的是设计一种以社会资本为基础的帆布商业模式,该模式以向客户提供的产品的价值为导向,并制定了一项战略,使年轻企业家能够在2018年在北苏拉威西万鸦老发展其业务。ANP(分析网络流程)分析被选为该...

    react-textfit, 反应组件使标题和段落适应元素.zip

    react-textfit, 反应组件使标题和段落适应元素 响应 textfit 将标题和段落适合任何元素快速: 使用二进制搜索有效地查找合适的拟合100% react任何样式配置( ...) 一起工作演示目录安装工具使用情况模式API插件许可协议

    java课程设计大作业-基于java构建的CrazyArcade泡泡堂游戏(源码+资源文件+说明文档)

    model.manager:包含元素管理器、工厂等,用于控制游戏各元素 model.vo:各种实体类,包括玩家、NPC、炸弹、方块等等 pro:配置文件目录,包含人物、道具、地图、方块、游戏设置等配置文件 thread:配合游戏一起执行...

    Java面向对象程序设计杨晓燕面向对象基本原则和模式.pptx

    类图最基本的元素是类或者接口。 第1页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第1页。 类的UML图 UML类图显示类的三个组成部分,第一是Java中定义的类名,第二个是该类的属性...

    container:TYPO3扩展,用于创建自定义的嵌套内容元素

    EXT:container-用于创建嵌套内容元素的TYPO3扩展特征简单的惊人容器(网格)作为自定义TYPO3内容元素没有默认容器,一切都将按照项目所需的方式构建支持多国语言(连接或自由模式(不支持混合模式)) 支持工作区...

Global site tag (gtag.js) - Google Analytics