一 引语

大家好,这是我第一次在网上写文章。从学校毕业一年多,感觉还有很多东西需要去学习。最近正在学习设计模式,希望可以在博客园把我学习的知识记录下来,能够和大家一起讨论设计模式相关的话题,也希望这个博客以后可以一直更新。由于本人是一名java程序员,所以之后的例子会以java程序去编写。本章节主要想讲一讲,学习设计模式需要的一些相关的知识。

二 相关的知识

在学习设计模式的之前,我们需要了解以下的知识:

  • 简单的uml的知识
  • 了解6大设计原则:“开-闭”原则、里氏替换原则、依赖倒转原则、接口隔离原则、单一职责原则、迪米特法则

三 UML

UML介绍

Unified Modeling Language(UML)译为统一建模语言,他是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持。(本段来自百度百科)

UML基础知识

要学习设计模式,我们需要了解以下知识点:

  • 类的表示

上面的图展示了使用UML怎样去表示一个Class。下面我们就来介绍Class图的组成部分:

  1.红色框:表示Class的作用域,作用域符号分为三种

+:public
-:private
#:protected

  2.黄色框:表示属性名和方法名

  3.绿色框:表示方法的参数

  4.深蓝框:表示属性的类型和方法的返回类型

  5.浅蓝框:表示默认值

  • 接口的表示

接口的表示比类的表示多了一个<<interface>>,其他就没有什么多说的了。

  • 继承关系(extends)

继承关系是使用实线空心三角箭头表示的

  • 实现关系(implements)

实现接口使用虚线空心三角箭头表示

  • 有一个关系(has)

有一个关系使用普通箭头表示

  • 依赖关系(Dependency)

依赖关系使用虚线箭头表示

对于UML的知识我们就介绍到这里,这些基础的知识已经够我们介绍设计模式了。

四 设计原则

上面我们介绍了UML的一些基础知识,接下来我们来介绍一下设计模式的六大设计原则。

“开-闭”原则

定义:一个软件实体应该对扩展开放,对修改关闭。

里氏替换原则

定义:所有引用基类的地方必须能够透明的使用其子类的对象

依赖倒转原则

定义:抽象不应该依赖于细节,细节应该依赖于抽象。即,要针对接口编程,而不是针对实现编程

接口隔离原则

定义:使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口

单一职责原则

定义:一个类只负责一个功能领域中的相应职责,即一个类中能引起它改变的因素只有一个

迪米特法则

定义:一个软件实体应该尽可能少的与其他实体发生相互作用,不要和“陌生人”说话,只与你的直接朋友通信

五 设计模式类别

设计模式的个数有很多,这里我们对常用的23种设计模式进行分类。那么它们大致可以分为三类。

  • 创建型模式

    代表:Simple Factory、Factory Method、Abstract Factory、Builder、Prototype、Singleton
  • 结构型模式
    代表:Adapter、Bridge、Composite、Decorator、Facade、Flyweight、Proxy
  • 行为型模式
    代表:Interpreter、Template Method、Chain of Responsibility、Command、Iterator、Mediator、Memento、Observer、Sate、Strategy、Visitor

六 相关书籍介绍

入门书籍推荐: head first 设计模式

其他书籍推荐: java与模式 、 GOF

[design pattern](0) 概述的更多相关文章

  1. Scalaz(10)- Monad:就是一种函数式编程模式-a design pattern

    Monad typeclass不是一种类型,而是一种程序设计模式(design pattern),是泛函编程中最重要的编程概念,因而很多行内人把FP又称为Monadic Programming.这其中 ...

  2. Null Object Design Pattern (Python recipe)

    Null Object 个人感觉非常有用.也是在review公司其他同事写代码的时候看到. 当时使用了flask的request全局请求变量g,然后使用了g.x保存了一个东西. 当时在view代码读取 ...

  3. Thinking In Design Pattern——MVP模式演绎

    原文<Thinking In Design Pattern——MVP模式演绎>不知为何丢失了,故重新整理了一遍. 目录 What Is MVP Domain Model StubRepos ...

  4. [Java] Design Pattern:Code Shape - manage your code shape

    [Java] Design Pattern:Code Shape - manage your code shape Code Shape Design Pattern Here I will intr ...

  5. 说说设计模式~大话目录(Design Pattern)

    回到占占推荐博客索引 设计模式(Design pattern)与其它知识不同,它没有华丽的外表,没有吸引人的工具去实现,它是一种心法,一种内功,如果你希望在软件开发领域有一种新的突破,一个质的飞越,那 ...

  6. 设计模式(Design Pattern)系列之.NET专题

    最近,不是特别忙,重新翻了下设计模式,特地在此记录一下.会不定期更新本系列专题文章. 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. 使用 ...

  7. [转]Design Pattern Interview Questions - Part 4

    Bridge Pattern, Composite Pattern, Decorator Pattern, Facade Pattern, COR Pattern, Proxy Pattern, te ...

  8. [转]Design Pattern Interview Questions - Part 2

    Interpeter , Iterator , Mediator , Memento and Observer design patterns. (I) what is Interpreter pat ...

  9. [转]Design Pattern Interview Questions - Part 3

    State, Stratergy, Visitor Adapter and fly weight design pattern from interview perspective. (I) Can ...

随机推荐

  1. spring boot 1.5.10.RELEASE ,spring boot admin 1.5.7 添加 security

    生产环境的客户端actuator最好是加上security校验,不然配置信息不登录就能直接获取到 server端配置,参考官方 文档,https://codecentric.github.io/spr ...

  2. MIUI8改MAC

    1.手机Root 2.RE文件管理器复制:/data/nvram/APCFG/APRDEB/WIFI 到电脑上 3.如下图用UltraEdit打开WIFI文件修改MAC 4.拷贝修改后的WIFI文件到 ...

  3. Java ——Number & Math 类 装箱 拆箱 代码块

    本节重点思维导图 当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double 等 int a = 5000; float b = 13.65f; byte c = 0 ...

  4. airtestUI简单操作

    touch 判断坐标位置 如touch((500, 600), duration=1) swipe 滑动位置 wait 等待画面出现 exists 判断画面中是否存在某个图片 test 调用输入法,输 ...

  5. [Python3] 013 集合:你不能两次进入同一个集合

    目录 0. 集合的独白 1. 集合的创建 2. 集合的特性 (1) 概述 (2) 少废话,上例子 3. 集合的遍历 4. 集合内涵 5. 集合的内置方法 6. 可供集合使用的一些方法/函数 (1) 又 ...

  6. 通过FSDataOutputStream向HDFS上写数据

    FSDataOutputStream,这个类重载了很多write方法,用于写入很多类型的数据:比如字节数组,long,int,char等等. 像FSDataInputStream一样,要获得FSDat ...

  7. Python学习-第一天-函数和模块的使用

    目录 Python学习-第一天总结 print输出的一种简单格式 函数参数之可变参数 模块管理函数 if else语句的单行实现(简洁) 变量作用域 函数书写格式 Python学习-第一天总结 pri ...

  8. HDU 6603 Azshara's deep sea(凸包+区间DP)

    由于题目要求,首先维护出一个凸包,然后在凸包上寻找点对关系,用rel[i][j]表示i点和j点之间是否可以连线,又由于维护出来的凸包上的点的个数不多,可以直接枚举点对并枚举所有圆,判断两点直线和圆是否 ...

  9. 7、 正则化(Regularization)

    7.1 过拟合的问题 到现在为止,我们已经学习了几种不同的学习算法,包括线性回归和逻辑回归,它们能够有效地解决许多问题,但是当将它们应用到某些特定的机器学习应用时,会遇到过拟合(over-fittin ...

  10. 使用Kafka的一些简单介绍: 1集群 2原理 3 术语

    目录 第一节 Kafka 集群 Kafka 集群搭建 Kafka 集群快速搭建 第二节 集群管理工具 集群管理工具 集群 Issues 第三节 使用命令操纵集群 第四节 Kafka 术语说明 第五节 ...