共性和可变性分析
来源:互联网 发布:java如何调用rest api 编辑:程序博客网 时间:2024/05/17 20:31
考虑设计中什么应该是可变的。这种方法与关注引起重新设计的原因刚好相反。它不是考虑什么会迫使设计发生改变,而是考虑什么能够在不引起重新设计的前提下改变。这时主要关注的就是对变化的概念进行封装,这时许多设计模式的主题。
如何在问题领域中找到不同变化,如何找到不同领域中的共同点。找到变化的地点,称为“共性分析”,找出如何变化,称为“变性分析”。
共性分析就是寻找一些共同的要素,它们能够帮助我们理解系列成员的共同之处在哪里。可变分析揭示了系列成员之间的不同,可变性只有在给定了共性之后才有意义。
共性分析寻找的是不可能随时间而改变的结构,而可变分析则要找到可能变化的结构。可变性分析只在相关联的共性分析定义的上下文中才有意义。从架构的视角来看,共性分析为架构提供长效的要素,而可变分析则促进他适应实际使用所需。也就是说,如果变化是问题领域中各个特定的具体情况,共性就定义了问题领域中将这些情况联系起来的概念。共通的概念将用抽象类表示。可变性分析所发现的变化将通过具体类(也就是从抽象类派生而来的具有特定实现的类)实现。
共性和可变性分析、三种视角与抽象类之间的关系
共性分体与问题领域的概念视角互相关联,可变性分析与特定情况的实现互相关联。
规约视角处于在中间,共同点与变化点都与这个视角有关。规约描述了如何与一组概念上相似的对象沟通,这些对象的每一个都表现出共有概念的变化情况。规约将称为实现层次上的抽象类或接口。
在面向对象设计的新视野中,我们可以这样说:
与抽象类的映射
讨论
抽象类 —> 核心概念
抽象类代表了将所有派生类联系起来的核心概念,这个核心概念定义了派生类的共同点。
共同点 —> 抽象类
共同点定义了我们需要使用的抽象类
变化点 —> 抽象类的派生类
从共同点中识别出的变化点成为抽象类的派生类
规约 —> 抽象类的接口
这些类的接口对应于规约层次
将类的设计过程简化成一个含有两个步骤的程序:
当你定义……
你必须问自己……
抽象类(共性)
需要用什么接口来处理这个类的所有责任
派生类(可变性)
对于这个给定的特定的实现(这个变化),应该怎样根据给定的规约来实现它。
规约视角和概念视角之间的关联:规约标识了用来处理此概念所有情况(即概念视角所定义的共性)所需的接口。
规约视角和实现视角之间的关联:对于给定的规约,怎样实现这个特定的情况(变化点)。- 共性和可变性分析
- 《设计模式解析》 第15章 共性与可变性分析 复习题
- 预测可变性和封装可变性
- 不变性和可变性
- 缓存使用中Redis,Memcached的共性和差异分析
- 缓存使用中Redis,Memcached的共性和差异分析
- 手机游戏共性分析
- 手机游戏共性分析
- PCA(主成成分分析)和LDA(线性判别分析)详解-共性和区别
- 分析手机游戏获得成功必需的10种特征和共性
- python对象的引用特征和可变性
- python不可变性和可变性的区别
- 手机游戏共性分析(转)
- Java和.Net的共性:中间语言
- JAVA 集合框架 共性方法和迭代器
- WPF与SilverLight共性和差异
- 集合框架 共性方法和迭代器
- Update和FixedUpdate的区别与共性
- TreeSet实现排序(二)
- TreeSet实现排序(一)
- ArrayList和Iterator的初步使用(二)
- 【C陷阱和缺陷】连接
- ArrayList和Iterator的初步使用(一)
- 共性和可变性分析
- HashTest以及对象唯一性(三)
- HashTest以及对象唯一性(二)
- 修改Outlook 2003邮件存储位置的方法
- 深入理解android 消息机制
- HashTest以及对象唯一性(一)
- Android 设置背景图片
- ArrayList迭代的两种方法
- c++中的继承