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

设计模式学习笔记<一>

阅读更多
模式的定义:

模式是一种问题的解决思路,它已经适用于一个实践环境,并且可以适用于其他环境。

设计模式得种类很多,包括分布式编程模式,用户界面模式,数据模型模式三大类。目前流行得GOF模式(gang of four:Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides),GRASP(General Responsibility Assignment Software Patterns)通用责任分配软件系列模式。

GRAPS模式着重考虑设计类的原则以及如何分配类的功能,而GOF模式则着重考虑设计的实现,类的交互和软件质量。可以说GOF模式就是符合GRASP模式要求的面向对象设计模式。

模式应该有以下特点:

(1) 在特定的场景下有可重用性,对相同类型的不同问题的环境,其解决方案都有效。
(2) 可传授性,即,问题出现的机会很多,解决问题的方案相同,人们相对可以接受。
(3) 有表示模式的名称。


GRASP模式的分类:

(1)Information Expert
(2)Creator
(3)Low coupling (低耦合)
(4)High Cohesion(高内聚)
(5)Polymorphism (多态)
(6)Pure Fabrication (纯虚构)
(7)Indirection (间接)
(8)Protected Variations (受保护的变化)


GRASP模式能让我们做好对象责任分配,要做好责任分配就要明确对象责任的含义。责任是类间的一种合约或是义务。责任可以包括行为(方法),数据,对象创建等。他们可以细分为两部分:知道责任---表示知道什么;行为责任---表示做什么。

责任=知道责任 + 行为责任

知道责任包括:

了解私有的封装数据
了解相关联的对象
了解能够派生或者计算的事物

行为责任包括:

自己执行一些行为,如创建一个对象或进行一次计算
在其他对象中的初始化操作
在其他对象中控制或协调各项活动

面向对象设计过程是将责任分配给对象的过程,注意,责任不是类的方法,类的方法是用来实现责任的。责任的分配可以反应在协作图或者顺序图中。

例如在销售业务中,存在一个交费行为,它属于一个责任。它的行为责任表示了交费的行为,它需要创建一个付款记录的对象。它的知道责任必须知道付款记录类Payment,知道如何记录及计算Payment类中的数据。而具有这个责任的对象应该是销售类Sales。

Information Expert

信息专家模式是面向对象设计的最基本原则。就是说,我们在设计类时,如果某个类能在某方面具有完整信息,足以实现某个责任,就将这个责任分配给这个类,这个类就是所谓的信息专家。

Creator

应用情况符合以下条件之一,类A应该具有创建类B的责任:

A是B的聚合
A是B的容器
A有初始化B的数据
A记录B的实例

当一个类有责任去创建其他类的实例时,这两个类就耦合起来。类间耦合用于测量一个类对另一个类依赖成都的大小。在程序设计中,以creator模式为原则,凡是不符合以上条件的应用,不要设计类的耦合。

Low Coupling

低耦合时指我们的设计有责任减少类间的链接。低耦合的作用很重要:
低耦合使得一个类的修改对其他类的影响范围有所降低。
低耦合使得系统变得更加容易维护。
低耦合使得类更加容易理解,因为类会变得简单,专业,高内聚。

以下情况会使得两个类产生耦合:

A具有B的属性。
A调用B的方法。
A的方法包含对B的引用,例如返回的是B类型或者参数是B类型。
A是B的子类或者A是B的实现类。

不要相连不需要通信的两个对象,不要无谓的耦合。

拇指规则两条:
如果A已经与B有链接,如分配责任A给B不合适(违反信息专家模式),那么分配责任B给A。
两个模块中的内部类间链接是一个大错误。


High Cohesion

高内聚是指分配责任时使得内聚保持为最高。目的时提高类的重用性,并且控制类设计的复杂度。也就是说,我们要努力分解类,使得分解出来的类具有独立的责任。

Controller

人们通常将接受和处理系统事件的职责分配给以下类:

能全面代表系统/设备或者子系统的类
可以代表系统事件发生时用例发生情景的类
代表某些卷入真实世界应用中的活动的类


以上这些类就是控制器类。GRASP有以下这些共识:
系统事件的接受和处理通常由一个高级类来代替。
一个子系统会有很多控制器类来分别处理不同的事务

多态

当相关的行为只是由于种类不同时,可以分配相关的责任给制定的种类。多态允许你设计出组件插入式的系统。

纯虚构

实现高内聚和低耦合是系统设计的目标,也是软件设计人员的责任。但是高内聚和低耦合是相互矛盾的,因为高内聚意味着类的数量增多,对象间要合作完成任务,他们之间的链接就要增加,使得耦合提高。要解决这个问题,就需要纯虚构模式,而应用这个模式又增加了高内聚的特征。GOF的抽象工厂模式就是纯虚构模式的一种实际体现。

间接
避免对象间的直接耦合,可以将协调组件或服务的职责分配给中间对象,这个中介对象称为间接或者中介对象。 GOF的Facade模式也是间接的例子。


受保护变化

找出预计又变化或不稳定的电,我们又责任为这些变化的点创建稳定的接口。受保护变化也可以理解为开闭原则(The OPen Closed Principle OCP)也就是说,一个软件实体应当对扩展开放,对修改关闭。换句话说,就是我们在设计一个模块的时候,应当使得这个模块在不被修改的前提下可以被扩展。

GOF的适配器Adapter模式就是受保护变化的一个普遍例子。







0
0
分享到:
评论

相关推荐

    jive.chm

    &lt;br&gt;系统设计&lt;br&gt; 1 jive设计思路 &lt;br&gt; 2 jive的工作内幕 &lt;br&gt; 3 Jive源代码研究 &lt;br&gt; 4 Jive中的设计模式 &lt;br&gt; 5 jive学习笔记 &lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;设计模式&lt;br&gt; 1 大道至简-Java之23种模式一点就通 &lt;br&gt; 2 设计模式...

    Jive资料集

    系统设计&lt;br&gt; 1 jive设计思路 &lt;br&gt; 2 jive的工作内幕 &lt;br&gt; 3 Jive源代码研究 &lt;br&gt; 4 Jive中的设计模式 &lt;br&gt; 5 jive学习笔记 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;数据库设计&lt;br&gt; 1 Jive Forums数据库说明(英文) &lt;br&gt; 2 Jive KB...

    水木清华站∶Java版精华区 含jsp及js等集合.chm

    [目录]Java学习笔记(推荐) &lt;br&gt; 6. [目录]JDBC文档 &lt;br&gt; 7. [目录]RMI 文档 &lt;br&gt; 2. [目录]Java资源(文档-书籍-下载-注册码) &lt;br&gt; 1. [目录]License 和注册码 &lt;br&gt; 2. [目录]好书推荐 &lt;br&gt; 3. [目录]关于Java的...

    springboot学习笔记

    ### Spring Boot 学习笔记知识点总结 #### 一、Spring 的发展历程 1. **Spring 1.x 时代:** - 特征:主要通过 XML 文件来管理 Bean 的声明周期和依赖关系。 - 实践问题:随着项目规模的增长,XML 配置变得异常...

    《设计模式学习笔记》

    《设计模式学习笔记》主要探讨了GOF的23种设计模式以及类设计的基本原则,旨在帮助开发者理解和应用这些经过时间验证的成熟解决方案。设计模式是面向对象软件设计中的核心概念,它们为解决常见的设计问题提供了标准...

    设计模式学习笔记总结

    这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、门面模式、命令模式、工厂方法、策略模式、代理模式以及状态模式。下面将对这些模式逐一进行详细...

    HTML5学习笔记(总结提炼版)——001

    5. &lt;aside&gt;:通常与主要内容相关,但不是主要内容的一部分,如侧边栏、注释或引用。 6. &lt;footer&gt;:定义页面或节的底部,通常包含版权信息、联系信息或页脚链接。 7. &lt;figure&gt;和&lt;figcaption&gt;:组合使用表示图片、...

    设计模式学习笔记大全

    以上就是压缩包中的设计模式学习笔记涉及到的主要内容。通过对这些模式的理解和应用,开发者可以更好地解决软件设计中的问题,提升软件的质量和可维护性。每种模式都有其适用场景,理解其背后的意图和应用场景是关键...

    java设计模式学习笔记

    ### Java设计模式学习笔记——外观模式(Facade Pattern) #### 概述 设计模式是软件工程领域中一种解决常见问题的可复用解决方案。在Java开发过程中,掌握设计模式能够帮助开发者更好地组织代码结构,提高代码的...

    HTML_CSS学习笔记.docx

    - `&lt;hr&gt;`:创建一条水平线,作为内容的分隔。 4. HTML5 列表标签: - `&lt;ul&gt;` 和 `&lt;li&gt;`:创建无序列表,常用作项目列表。 - `&lt;ol&gt;` 和 `&lt;li&gt;`:创建有序列表,列表项有编号。 5. HTML5 图片、链接和表格标签: ...

    设计模式学习笔记.ppt

    设计模式学习笔记.ppt 自己写的一点学习笔记。

    HeadFirst设计模式学习笔记

    《HeadFirst设计模式学习笔记》是一份详尽的资料,旨在帮助读者深入理解并掌握设计模式这一编程领域的核心概念。设计模式是软件工程中的一种最佳实践,它在解决常见问题时提供了一种标准的解决方案,使得代码更易于...

    Java设计模式学习笔记

    ### Java设计模式学习笔记 #### 1. 设计模式的七大原则 ##### 1.1 设计模式的目的 设计模式是一种解决特定问题的通用解决方案,它可以帮助开发人员编写出更高质量、更容易维护和扩展的代码。设计模式的目标在于...

    自学HTML笔记

    &lt;h1 align="center"&gt;一级标题&lt;/h1&gt; &lt;h2&gt;二级标题&lt;/h2&gt; &lt;h3&gt;三级标题&lt;/h3&gt; &lt;/body&gt; ``` - 上述示例展示了如何设置页面背景、段落对齐方式、水平线的属性、字体控制以及不同级别的标题。 - `&lt;div&gt;` 和 `&lt;span&gt;` 的...

    23种设计模式学习笔记

    这个“23种设计模式学习笔记”文档将引导你深入理解这些模式,并帮助你在实际编程中有效地应用它们。以下是对23种设计模式的详细解读: 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。它常用于控制...

    C#设计模式学习笔记

    C#设计模式学习笔记是一份详尽的资源,适合任何希望深入了解如何在C#编程中应用设计模式的开发者。这份笔记涵盖了多种设计模式,旨在提升代码的可读性、可维护性和可扩展性,这些都是软件开发中至关重要的要素。 ...

    Java设计模式学习笔记.pdf

    在学习Java设计模式时,掌握其概念、应用、优点和缺点非常重要。设计模式是软件开发中经常使用的一种通用解决方案模板,用于解决特定上下文中的常见问题。它们源于设计模式的研究,通常被认为是软件设计中的最佳实践...

    SpringMVC框架第一天【随堂笔记】1

    SpringMVC框架是Java开发Web应用的常用工具,它基于MVC设计模式,提供了一种轻量级的请求驱动方式来构建Web应用程序。本篇笔记将深入探讨SpringMVC的基本概念、三层架构以及如何创建一个入门级的SpringMVC项目。 ...

    HML学习笔记

    这份“HML学习笔记”旨在为初学者提供全面而详细的HTML入门指导。 HTML是一种标记语言,通过在文本中插入特定的标签,来告诉浏览器如何显示内容。例如,`&lt;h1&gt;`标签表示一级标题,`&lt;p&gt;`标签表示段落,`&lt;a&gt;`标签用于...

Global site tag (gtag.js) - Google Analytics