设计模式:开篇

简介:   最近在整理设计模式这个系列,这里做一下全局的概括。本系列的文章对于初识设计模式的朋友也许不太适应,对于那些了解过或者使用过设计模式的人比较适应,本系列的文章对设计模式的关键点做了一个终结性的陈述,也列举了相关例子方便理解和记忆,但是并没有循序渐进的讲解。

  最近在整理设计模式这个系列,这里做一下全局的概括。本系列的文章对于初识设计模式的朋友也许不太适应,对于那些了解过或者使用过设计模式的人比较适应,本系列的文章对设计模式的关键点做了一个终结性的陈述,也列举了相关例子方便理解和记忆,但是并没有循序渐进的讲解。譬如,在适配器模式中,博主阐述了适配器的定义、类图、案例等,但是并没有阐述类似“比如你买了一个港版的iphone6s,但是大陆的插座不并适合,需要一个转接口,这个转接口就是适配器”这样的语句来更形象的讲解相关内容。
  虽然关于设计模式的文章铺天盖地,但是博主还是想自己整理一下,符合自己思路的设计模式。最近看到一句话,非常有感触,大概是这样说的:坚持做自己懒得做却正确的事,你就能得到别人想得到缺得不到的东西。


面向对象的设计原则

  熟记面向对象的设计原则可以更好的理解设计模式,对于面向对象的设计原则,各个版本的说法不一,有说五种的,有说六种的,但是基本就是下面七种原则的组合,这里全部罗列出来,加深一下印象(非斜体的在每个版本中都有)。

  • SRP:单一职责原则,一个类应该仅有一个引起它变化的原因。Single Responsibility Principle
  • OCP:开闭原则,讲的是设计要对扩展有好的支持,而对修改要严格限制。Open Close Principle
  • LSP:里氏替换原则,子类必须能够替换基类,否则不应当设计为其子类。Liskov Substitution Principle
  • DIP:依赖倒换原则,设计要依赖于抽象而不是具体化。Dependence Inversion Principle
  • ISP:将打的接口打散成多个小接口。 Interface Segregation Principle
  • LoD:迪米特法则,一个对象应当尽可能少的去了解其它对象。也就是一个关于如何松耦合的法则。Law of Demeter,也称为最少只是原则LKP Least Knowledge Principle
  • CARP:优先使用复合/聚合,而不是继承。Composition Aggregation Principle

设计模式的分类

设计模式一共可以分为23种,3大类:
创建型
1. Factory Method(工厂方法)http://blog.csdn.net/u013256816/article/details/50975438
2. Abstract Factory(抽象工厂)http://blog.csdn.net/u013256816/article/details/50975438
3. Builder(建造者)http://blog.csdn.net/u013256816/article/details/50978024
4. Prototype(原型)http://blog.csdn.net/u013256816/article/details/50981322
5. Singleton(单例)http://blog.csdn.net/u013256816/article/details/50966882
结构型
6. Adapter Class/Object(适配器)http://blog.csdn.net/u013256816/article/details/51000290
7. Bridge(桥接)http://blog.csdn.net/u013256816/article/details/51000327
8. Composite(组合)http://blog.csdn.net/u013256816/article/details/51009417
9. Decorator(装饰)http://blog.csdn.net/u013256816/article/details/51009449
10. Facade(外观)http://blog.csdn.net/u013256816/article/details/51009480
11. Flyweight(享元)http://blog.csdn.net/u013256816/article/details/51009522
12. Proxy(代理)http://blog.csdn.net/u013256816/article/details/51009592
行为型
13. Interpreter(解释器)http://blog.csdn.net/u013256816/article/details/51058049
14. Template Method(模板方法)http://blog.csdn.net/u013256816/article/details/51018676
15. Chain of Responsibility(责任链)http://blog.csdn.net/u013256816/article/details/51058075
16. Command(命令)http://blog.csdn.net/u013256816/article/details/51058106
17. Iterator(迭代器)http://blog.csdn.net/u013256816/article/details/51058234
18. Mediator(中介者)http://blog.csdn.net/u013256816/article/details/51058254
19. Memento(备忘录)http://blog.csdn.net/u013256816/article/details/51244961
20. Observer(观察者)http://blog.csdn.net/u013256816/article/details/51245002
21. State(状态)http://blog.csdn.net/u013256816/article/details/51245024
22. Strategy(策略)http://blog.csdn.net/u013256816/article/details/51245046
23. Visitor(访问者)http://blog.csdn.net/u013256816/article/details/51245073

各个模式之间的对比 http://blog.csdn.net/u013256816/article/details/51245096


类图

  熟练的掌握类图能够方便理解和记忆设计模式。这里沿用了资料1中所陈述的内容。
  常见的有以下几种关系:泛化(Generalization)、实现(Realization)、关联(Association)、聚合(Aggregation)、组合(Composition)、依赖(Dependency)
1. 泛化:是指一种继承(extends)关系。在UML类图中,用空心三角形+实线来表示,箭头指向父类。
这里写图片描述
2. 实现:一般来讲实现(implements)是针对类与接口之间的关系而言的。在UML类图中,用空心三角形+虚线来表示。
这里写图片描述
3. 关联:是一种拥有的关系,它使用一个类知道另一个类的属性和方法。如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头,箭头指向被拥有者。(代码体现:成员变量)
这里写图片描述
4. 聚合:是整体与部分的关系,且部分可以离开整体而单独存在。如陈赫轮胎是整体和部分的关系,轮胎离开车依然存在。聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。在UML类图中,用带空心菱形的实心线表示,菱形指向整体。(代码体现:成员变量)
这里写图片描述
5. 组合:是整体和部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公司就不存在部门。组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。在UML类图中,用带实心的菱形的实线表示,菱形指向整体。(代码体现:成员变量)
这里写图片描述
6. 依赖:是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖。在UML类图中,用带箭头的虚线表示,指向被使用者。(代码体现:局部变量、方法的参数或者对静态方法的调用)
这里写图片描述

各个关系的强弱顺序:泛化=实现>组合>聚合>关联>依赖。

参考资料
1. 《UML类图几种关系的总结

目录
相关文章
|
5月前
|
设计模式 Java
【Java设计模式 - 专栏开篇简介】 java设计模式开篇
【Java设计模式 - 专栏开篇简介】 java设计模式开篇
39 0
|
设计模式 算法 关系型数据库
设计模式 | 开篇简介
模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。
104 1
设计模式 | 开篇简介
设计模式:开篇--体验设计
试想一下,如果写出来的代码如艺术品,那将是多么美妙的一件事。因此,小编该好好学习一下怎么去设计代码了。设计模式这种东西来到世界上已经有相当历史了,可是工作了之后发现真正能用上的还是少数人。
1236 0
|
算法 设计模式
设计模式——开篇
什么是设计模式? 一说起设计模式,可能很多人都觉得很高大上的感觉,事实上,设计模式只是针对某一类问题的最佳解决方案而已,设计模式是由许多优秀的软件系统中总结出来的可成功复用的设计方案。
1009 0
|
程序员
[转载].NET设计模式(1):开篇
.NET设计模式开篇 ——.NET设计模式系列之一 Terrylee,2005年12月06日 前言 加入Design & Pattern团队有几个月的时间了,惭愧的是从没有写过关于设计模式的随笔,得到wayfarer的同意,把企业库系列的随笔放在了团队的首页上。
1189 0
|
19天前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
|
2月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
22天前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###

热门文章

最新文章

  • 1
    C++一分钟之-设计模式:工厂模式与抽象工厂
    43
  • 2
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    48
  • 3
    C++一分钟之-C++中的设计模式:单例模式
    58
  • 4
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    38
  • 5
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    63
  • 6
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    58
  • 7
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    42
  • 8
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    50
  • 9
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    110
  • 10
    Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
    78
  • 下一篇
    无影云桌面