http://www.riabook.cn/doc/designpattern/

From Gossip@caterpillar

非关语言: 设计模式

程式设计是思维具体化的一种方式,是思考如何解决问题的过程,设计模式是在解 决问题的过程中,一些良好思路的经验集成,最早讲设计模式,人们总会提到  Gof  的著作,它最早将经典的 23 种模式集合在一起说明,对后期学习程式设计,尤其是对从事物件导向程式设计的人们起了莫大的影响。

后来设计模式一词被广泛的应用到各种经验集成,甚至还有反模式(AntiPattern),反模式教导您如何避开一些常犯且似是而非的程式设计思维。

这边的话将整理一些设计模式学习心得,实作的部份是使用Java,因而您会看到一些与 Gof 模式不同的图及实作方式,这是为了善用一些Java本身的特性,至于C++的实作方面,Gof 的书已经给了不少的例子。

在一些模式的实作上,您会发现我用了介面(interface)来取代抽象类别(Abstract class),这与原先的Gof书中的范例会不尽相同,这是因为在C++中没有介面,一个完全没有实作任何方法的抽象类别,根据当时描述的主题特性,可以 的话会将之换为介面,在语义上会较符合Java语言的特性,但是您要知道的是,介面与完全没有实作任何方法的抽象类别在某些时候是可以互换的。

在这边所看到的  UML 图都是使用  Jude 绘制的,Jude 是一个纯 Java 撰写的 UML 工具程式,可运行与 Windows、Linux 等多个平台,体积小,使用简易。

Gof 模式

以下的设计模式则是我个人从 Gof 学习中的个人体会与实作,并增加几个导入或衍生的简单模式。

  • Creational 模式
物件的产生需要消耗系统资源,所以如何有效率的产生、管理 与操作物件,一直都是值得讨论的课题, Creational 模式即与物件的建立相关,在这个分类下的模式给出了一些指导原则及设计的方向。
  • Simple Factory 模式
  • Abstract Factory 模式
  • Builder 模式
  • Factory Method 模式
  • Prototype 模式
  • Singleton 模式
  • Registry of Singleton 模式
  • Structural 模式
如何设计物件之间的静态结构,如何完成物件之间的继承、实 现与依赖关系,这关乎着系统设计出来是否健壮(robust):像是易懂、易维护、易修改、耦合度低等等议题。Structural 模式正如其名,其分类下的模式给出了在不同场合下所适用的各种物件关系结构。
  • Default Adapter 模式
  • Adapter 模式 - Object Adapter
  • Adapter 模式 - Class Adapter
  • Bridge 模式
  • Composite 模式
  • Decorator 模式
  • Facade 模式
  • Flyweight 模式
  • Proxy 模式(一)
  • Proxy 模式(二)
  • Behavioral 模式
物件之间的合作行为构成了程式最终的行为,物件之间若有设 计良好的行为互动,不仅使得程式执行时更有效率,更可以让物件的职责更为清晰、整个程式的动态结构(像是物件调度)更有弹性。
  • Chain of Responsibility 模式
  • Command 模式
  • Interpreter 模式
  • Iterator 模式
  • Mediator 模式
  • Memento 模式
  • Observer 模式
  • State 模式
  • Strategy 模式
  • Template Method 模式
  • Visitor 模式
多执行绪模式

在很多应用中都会使用多执行绪,尤其是在Web应用中,多执行绪以 Gof 整理的模式为基础,考量多执行绪环境中,如何组合这些基本模式来完成多执行绪安全要求。

  • Guarded Suspension 模式
  • Producer Consumer 模式
  • Worker Thread 模式
  • Thread-Per-Message 模式
  • Future 模式
  • Read-Write-Lock 模式
  • Two-phase Termination 模式
  • Thread-Specific Storage 模式
参考资料

以下是以Java实作设计模式的介绍网站,从下面的连结开始,当中您可以找到更多设计模式的资源。

  • Huston Design Pattern
  • The Design Patterns Java Companion
  • 板 桥里人的 Java 设计模式学习心得
  • UML 软件工程组织

学习设计模式的好网站相关推荐

  1. 阿里大佬告诉我,想学习设计模式,得先学好这些硬核技能

    写在前面 我们继续学习架构师技能,今天是本系列的第二篇,希望大家持续关注. 可能你不是科班出生,甚至大学都没念,没背景没关系.我们只要每天进步一点点,一个月.两个月.半年.一年....... 规划性的 ...

  2. 小菜学习设计模式(五)—控制反转(Ioc)

    写在前面 设计模式目录: 小菜学习设计模式(一)-模板方法(Template)模式 小菜学习设计模式(二)-单例(Singleton)模式 小菜学习设计模式(三)-工厂方法(Factory Metho ...

  3. java学习视频网站_学习Java的视频网站

    原标题:学习Java的视频网站 很多自学Java的人都发现网上的Java视频教程都会分章节讲解,但是总感觉很乱?那是因为你没有比较系统.全面的了解Java语言,没有将Java应用到实际项目中,那么有哪 ...

  4. 1.4 如何学习设计模式

    在了解了设计模式的历史和分类后,应该如何学习设计模式呢?在学习设计模式之前,读者一定要树立一种意识,那就是:设计模式并不只是一种方法和技术,它更是一种思想.一个方法论.它和具体的语言没有关系,学习设计 ...

  5. 跟着ZHONGHuan学习设计模式--桥接模式

    转载请注明出处! ! !http://blog.csdn.net/zhonghuan1992 全部配套代码均在github上:https://github.com/ZHONGHuanGit/Desig ...

  6. 我学习设计模式的一些所想所得

    设计模式一直饱受争议,很多人对设计模式推崇备至,但也有很多人认为设计模式误导了编程者,见(<解密"设计模式">). 我也只是一个普通的编程人员,这里只能谈一谈我在学习设 ...

  7. python中小学生编程学习-推荐几个适合小白学习Python的免费网站

    9gd少儿编程网-Scratch_Python_教程_免费儿童编程学习平台 想要学好python,只靠看Python相关的书籍是远远不够的!互联网时代,我们还要充分利用网络上的免费资源,不然怎样成为一 ...

  8. 学习MVC之租房网站(二)-框架搭建及准备工作

    在上一篇<学习MVC之租房网站(一)-项目概况>中,确定了UI+Service的"双层"架构,并据此建立了项目 接下来要编写Common类库.配置AdminWeb和Fr ...

  9. [转自左潇龙的博客]设计模式大杂烩(24种设计模式的总结以及学习设计模式的几点建议)...

    原文地址:    https://www.cnblogs.com/zuoxiaolong/p/pattern26.html 作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本 ...

最新文章

  1. 如何快速生成不同系列的Apriltag码?
  2. C#_Math函数总结
  3. 口腔取模过程及注意事项_数字化口 腔的发展与展望
  4. 全新版本仿网易云音乐来啦
  5. matlab程序求一个正交的相似变换矩阵,图像的等距变换,相似变换,仿射变换,射影变换及其matlab实现...
  6. 多库共存 包装集的问题 点击按钮创建一个p 几个属性介绍 jQuery的插件
  7. 并查集:P1196 [NOI2002] 银河英雄传说
  8. signal软件如何退出账号_超好用的手机视频剪辑软件Videoleap内购分享
  9. mysql 客户端乱码_Mysql客户端中文乱码问题解决
  10. 安装教程之JDK下载与安装_更新2022
  11. 银河麒麟安装steam
  12. yum源的三种配置方式
  13. 松下弧焊机器人 调电压_松下焊接机器人-基本操作篇.pdf
  14. win10解决未安装任何音频输出设备
  15. fatal: couldn‘t find remote ref develop-XXXX fatal: the remote end hung up unexpectedly
  16. 新海诚没有参与制作的作品_还未开始!新海诚的下一部作品还是白纸
  17. vscode没有应用程序与此操作的指定文件有关联
  18. ​软考高项论文写作这些雷区,千万要避开
  19. 一款高颜值的词云包让我拍案叫绝,我爷爷看了都能学会
  20. php文件档结构图,ecshop文件结构名称详细版

热门文章

  1. [投稿]对某国的一次APT攻击过程
  2. python __setitem__()方法理解
  3. 融云全球社交泛娱乐洞察,「音频社交」如何出海破圈
  4. PHP颜色十六进制转化为RGB
  5. Red Star 24 hours for you to promptly resolve the hammer crusher failure
  6. springboot + flowable + idm 在线编辑器
  7. 解决electron安装,卡在install.js不动的问题,UnhandledPromiseRejectionWarning: RequestError: read ECONNRESET
  8. 微信小程序项目开发实战:用WePY、mpvue、Taro打造高效的小程序》(笔记4)支持React.js语法的Taro框架
  9. Python矩阵运算(不使用库)
  10. 用html5制作自己的课程表