元素模式是单一关系的表现,是设计模式不可再分的最小单元

当我们在软件设计中想应用设计模式时,往往是凭借设计模式的名字和需求有点类似,之后就尝试着将模式生搬硬套到其中。而真正去理解设计模式往往变得比较困难,很多书籍也仅仅是用不同方法来降低模式记忆的强度。难道设计模式不能从更加细微的层面去理解吗?当然可以,设计模式就像可以再分解的化合物一般是可在分解,这种再分解后的模式叫做元素模式(elemental design
patterns , EDP)。

元素模式重申了一个非常重要的思想:模式是概念,而不是结构。GoF也这样认为:“假设某语言是面向过程的语言,那么它可能就会拥有一批被我们称为‘集成’、‘封装’和‘多态’的设计模式。”,显然GoF认为模式是语言无关的概念。在面向对象语言中可能已经有了“封装、集成和多态”的概念,但在面向过程的语言中同样可以通过设计模式达到这些概念的效果。两者不同的是,或者不同语言间不同的是,在一种语言中一些概念已经根深蒂固的被深入的理解,甚至是内嵌到了语言特性中,在另一种语言中他们却尚未被充分理解,但可以用模式的结构协助我们理解。

那么元素模式是通过什么方式分解出来的呢?我们阅读设计模式相关文献可以了解到设计模式涉及11个方面:意图(intent)、动机(Motivation)、适用性(applicability)、结构(structure)、参与者(participants)、合作(collaborations)、结果(consequences)、实现(implementation)、示例代码(samples
code)、已知应用(known uses)、相关模式(Related patterns)。设计模式是特定语境下的常见问题的常用解决方案,权威形式的设计模式,它的大部分片段都可以很容易的归为三类:解决方案、问题以及语境。我们可以将上文提到的模式的组成片段整理到模式定义的这三个类别中去,如下表所示。


解决方案


结构

实现

示例代码


问题


意图

动机

已知应用


语境


应用范围(适用性)

结果

相关模式

上表的三个分为并没有将设计模式涉及的角参与者(participants)和协作活动(collaborations)包含在内。而由于这两者存在的环境(语境)中常常存在问题,而他们有反映着问题的现象,同时它们还构成了问题解决方案的一大部分,所以这两者贯穿于上表的三种类别。总之参与者和协作活动在上表描述的设计模式的三个分支的交叉点上描述着设计模式的组成部分,以及这些部分的关系。由此可见关系构成了设计的核心。

参与者和协作活动所表述的关系会有很多种,从简单到复杂,那么什么样的关系才是元素模式所真正关心的呢?既然设计模式可以进一步分解,就应该将其分解到最小单元,而两个事物间最简单的关系则是单一关系。从而得知我们可以将设计模式中的复制的关系网分解为这种单一关系,而这种关系往往是方法对另一个方法的调用依赖关系,我们称之为关键关系。元素模式就是由此而逐渐演化推导而来的,也是后续深入理解设计模式的基础。

时间: 2024-10-18 23:39:19

元素模式是单一关系的表现,是设计模式不可再分的最小单元的相关文章

《元素模式》译后记

这本书译完至今已经有大半年了,电子工业出版社也在去年的九月正式出版了它.在此之后,我从审稿者以及读者手里得到的大部分反馈无非就是三个问题:为什么书名翻译成"元素模式"?这本书与<设计模式>这本书的关系是什么?这些模式有什么用?所以,我打算写一篇文章,谈谈我的看法. 首先,这本<Elemental Design Patterns>的书名,如果按照中规中矩的译法应该翻译成"设计模式要素",但看完全书,你会遇到一个问题,就是这本书讲的是32种可用各

元素模式

元素模式(最新Jolt大奖得主彻底颠覆传统GoF设计模式的里程碑著作) [美]Jason McC. Smith(杰森.史密斯) 著 高博 凌杰 徐平平译 ISBN 978-7-121-23468-2 2014年6月出版 定价:69.00元 364页 16开 编辑推荐 本书介绍一类全新的设计模式--元素模式(Elemental Design Pattern).元素模式植根于软件程序设计理论,目的却在于实践性和实用性.程序设计新手与资深开发工程师都是元素模式的目标受众.它能带领学生加入软件工业大军,

架构模式对象与关系结构模式之:标识域(Identity Field)

一:标识域(Identity Field) 标识域(Identity Field)可以理解为主键.使用领域模型和行数据入口的时候,就要使用标识域,因为这两个对象代表的是唯一存在的那个数据记录.事务脚本.表模块.表数据入口等就不需要这个映射. public abstract class DomainObj{    public string Id {get; set;} public string Name {get; set;}    protected UnitOfWork uow = new

窗口滚动时,判断元素与视野的关系-js代码

思路解析: 通过判断以下三者与0的关系,来判断元素与视野的关系: 元素顶部距离窗口顶部的距离:t = elem.offset().top - $(window).scrollTop(); 元素底部距离窗口底部的距离:b = h - ( t + elem.height() ); 窗口的高度:h = $(window).height(); 可以列出以下情况: 根据这些情况就可以判断元素与视野的关系. 源码如下: // 判断元素和视野的关系 function setCheckInview(elem,

google 分屏 横屏模式 按home键界面错乱故障分析(二) 分屏的启动过程

google 进入分屏后在横屏模式按home键界面错乱(二) 你确定你了解分屏的整个流程? Android 关机对话框概率没有阴影故障分析 android recent key长按事件弹起触发最近列表故障分析 google 分屏 popup无法显示故障分析 分享此文便是对代码GG的支持,也是爱的表达方式,所以让爱来的猛烈些吧. 代码阅读,请到此处http://androidxref.com 查看原生代码 前情回顾: google 分屏 横屏模式 按home键界面错乱故障分析(一) 上一节我们主要

责任链模式 职责链模式 Chain of Responsibility Pattern 行为型 设计模式(十七)

责任链模式(Chain of Responsibility Pattern) 职责链模式 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系 将这些对象连接成一条链,并沿着这条链传递请求,直到有一个对象处理它为止. 责任链模式中,每个对象通过持有对下家的引用而链接起来,形成一条链条,串联起来多个处理对象. 在责任链模式中,请求在链上进行传递,直到链上的某一个对象决定处理此请求. 发出这个请求的客户端程序并不知道到底是哪一个对象具体的处理了请求 这使得系统可以在不影响客户

设计模式所遵循的原则及模式之间的关系

总原则:开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭.在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果.所以一句话概括就是:为了使程序的扩展性好,易于维护和升级.想要达到这样的效果,我们需要使用接口和抽象类等,后面的具体设计中我们会提到这点. 1.单一职责原则 不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,如若不然,就应该把类拆分. 2.里氏替换原则(Liskov Substitution

css基础知识+css选择符(元素选择符、关系选择符)

首先我先介绍在html网页中怎么使用导入css样式的方法 1.行内样式:<p style="color:red">行内样式使用css</p> 2.页内样式:在head标签里设置 <span style="font-size:18px;"><head> <style> p{ color:red } </style> </head> <body> <p>页内使用c

Android多任务切换与Activity启动模式SingleTask之间关系的分析

这里会以多个场景列子进行分析,在分析之前先了解一下基本的概念. Task任务:一系列Activity的集合,这些Activity以栈的形式进行排列(后进先出). 那在什么时候系统会新建一个Task任务呢? 这个要以app来区分(注意,这里看Activity是否属于同一报名),当一个app以singleTask启动方式启动另外一个app的activity时,会新建一个Task任务,而第二个app的Activity会成为这个栈中的根. 反之,在什么时候不会创建新任务呢?当一个app以非SingleT