文档章节

一句话总结java23种设计模式

HZCoder
 HZCoder
发布于 2016/03/15 11:45
字数 1568
阅读 237
收藏 16

设计模式的六大原则

1、开闭原则(Open Close Principle):对扩展开放对修改关闭

2、里氏代换原则(Liskov Substitution Principle):父类出现的地方,子类也可出现

3、依赖倒转原则(Dependence Inversion Principle):依赖抽象而不依赖具体

4、接口隔离原则(Interface Segregation Principle):多个隔离的接口,比使用单个接口要好

5、迪米特法则(最少知道原则)(Demeter Principle):最少知道原则。一个实体应当尽量少的与其他实体之间发生相互作用

6、合成复用原则(Composite Reuse Principle):尽量使用合成/聚合的方式,而不是使用继承。

 

 

 

创建型模式(五种)

  • 工厂方法模式(Factory):工厂创建对象

  • 抽象工厂模式(Abstractfactory):抽象工厂实例创建对象,工厂可修改,灵活度高

  • 单例模式(Sington):适用于只需要一个对象的情况

  • 建造者模式(Builder):创建复杂对象

  • 原型模式(Prototype):复制对象,包括深度复制和浅度复制,深度复制重建引用对象,浅度复制不创建

结构型模式(七种)

  • 适配器模式(Adapter):开发阶段不考虑,适用于后期维护时添加功能

  • 装饰器模式(Decorator):扩展方法功能,可在方法执行前后加代码

  • 代理模式(Proxy):调用引用对象方法实现自身功能

  • 外观模式(Facade):CPU,内存,硬盘组装成电脑。组装多个对象实现自身功能。

  • 桥接模式(Bridge):通过setXxx方法任意修改引用实例,调用同样方法实现不同功能

  • 组合模式(Composite):部分与整体,常用于表示树形结构

  • 享元模式(Flyweight):维护资源集合,经典案例:数据库连接池,避免重新开启数据库链接的开销

 

 

行为型模式(十一种)

  • 策略模式(Strategy):定义多个不同的实现类,这些类实现公共接口,通过调用接口调用不同实例得到不同结果

  • 模板方法模式(Template):父类定义公共方法,不同子类重写父类抽象方法,得到不同结果

  • 观察者模式(Observer):目标方法被调用,通知所有观察者

  • 迭代子模式(Interator):迭代器实现原理

  • 责任链模式(ChainOfResponsibility):依次引用,依次执行

  • 命令模式(Commond):各司其职,逐层调用,有点像三层架构

  • 备忘录模式(Memento):建立原始对象副本,用于存储恢复原始对象数据

  • 状态模式(Stage):通过改变状态,改变行为

  • 访问者模式(Visitor):结构与操作解耦。灵活的操作,放入固定的结构中执行

  • 中介者模式(Mediator):中介类维护对象行为。主程序直接调用中介对象即可

  • 解释器模式(Iterpreter):定义解释类,解释包装对象

 

     最近又看了一遍java23种设计模式,网上很多都说java有23种设计模式,但是总感觉不对,像拦截器,监听器,过滤器,mvc难道不属于设计模式吗。这个问题没多大意义,就不讨论了。上次直接把这23种设计模式看完之后当时看小Demo貌似是理解了,但是怎么也不能把23种全部背下来。最近又重新看了一遍,认真的体会了一下其中的思想。其实说这句话有些牵强了,现在的水平再怎么认真也不能把设计模式的思想体会的淋漓尽致。这次与上次的不同是,几乎不用看讲解了,看代码全部能理解小Demo的工作原理。于是试着各用一句话来总结他们。无论是深入理解设计模式的大牛,还是没看过设计模式的初学者。一定会有许多人看到我的总结不知所云。我只是试着按我的思路总结一下。好让自己容易记忆。各位也同样可以按自己的思路各写一句话总结。

 

     如果想快速了解一下设计模式推荐一篇博客:http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html。对的,是了解,不是研究。个人感觉设计模式并不是随随便便给你举个现实中的例子就能够学好的。即使例子再生动,想理解设计模式的精髓必须深入到代码中去。例如大多数框架开启时用到的工厂模式;Tomcat中Pipeline中Valve的责任链模式调用;StandardBase中使用代理模式引入LifecycleSupport来增加自身对生命周期的管理能力;LifecycleListener中执行各个监听器时的观察者模式。(一直还没时间研究SSHM源码只看了一点Tomcat源码只能拿Tomcat举例了)。现在自己也只是初步知道了设计模式长什么样子。真的遇到了能不能认得出来还不一定,就更谈不上深入理解了。

     

     个人认为设计模式的学习非一朝一夕能成的东西。它是在自己做开发看源码的工程中慢慢体会出来的。这也是自己为什么老是不更新设计模式栏帖子的原因。写个小案例,告诉你这叫XX模式,像这种帖子网上已经很多了,没必要再重复了,之后在读源码的工程中遇到好的应用一定会总结到博客中的。

 

     提供一个自己学习设计模式的思路:先看小Demo认识各种设计模式的样子,之后在读源码时再慢慢理解各种设计模式的好处。而且设计模式往往还不是单独一个出现的,例如过滤器加拦截器能实现SpringAOP的功能。知识有限能举的例子也不多,读源码时注意这一点就行。

 

如果想看Demo可以在网上找,也可以在我github网址https://github.com/smallbug-vip/repo上获取,其中大部分源码还是从上面博客中直接拷贝的。

本文转载自:http://zkread.com/article/632886.html

上一篇: 安装Nginx
下一篇: 构建Mysql连接池
HZCoder
粉丝 8
博文 44
码字总数 19712
作品 0
杭州
程序员
私信 提问
加载中

评论(4)

HZCoder
HZCoder 博主

引用来自“tianxia007”的评论

引用来自“tianxia007”的评论

有个设计模式的项目 纯英文的看起来有点疑惑,楼主 你这个有修饰吧

注释
http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html 原文地址,代码我还没看
tianxia007
tianxia007

引用来自“tianxia007”的评论

有个设计模式的项目 纯英文的看起来有点疑惑,楼主 你这个有修饰吧

注释
tianxia007
tianxia007
有个设计模式的项目 纯英文的看起来有点疑惑,楼主 你这个有修饰吧
tianxia007
tianxia007
总结的不错 有空看下
Java 代理模式之一:静态代理

代理模式Proxy Pattern,是Java23种设计模式之一,也是比较重要的一种。 本文以小Demo为例,注释中讲解静态代理。 接口类: package com.andy.proxy.statis;/*** @包名 :com.andy.proxy<br...

Andy市民
2013/08/28
235
0
PHP设计模式(一):简介及创建型模式

我们分三篇文章来总结一下设计模式在PHP中的应用,这是第一篇创建型模式。 一、设计模式简介 首先我们来认识一下什么是设计模式: 设计模式是一套被反复使用、容易被他人理解的、可靠的代码设...

juhenj
2014/05/15
286
2
Java 23种设计模式 初步了解

总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接...

engeue
01/02
71
0
让设计模式飞一会儿|①开篇获奖感言

     哈喽,大家好,从今天开始我将正式开启有关设计模式的系列文章的写作,和大家一同来聊聊设计模式这个老生常谈的玩意。关于设计模式的文章,书籍,多如牛毛,随便百度、Google一下都...

java进阶架构师
09/18
0
0
【设计模式笔记】(十六)- 代理模式

一、简述 代理模式(Proxy Pattern),为其他对象提供一个代理,并由代理对象控制原有对象的引用;也称为委托模式。 其实代理模式无论是在日常开发还是设计模式中,基本随处可见,中介者模式中...

MrTrying
2018/06/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
47分钟前
4
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
57分钟前
4
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
6
0
从零基础到拿到网易Java实习offer,我做对了哪些事

作为一个非科班小白,我在读研期间基本是自学Java,从一开始几乎零基础,只有一点点数据结构和Java方面的基础,到最终获得网易游戏的Java实习offer,我大概用了半年左右的时间。本文将会讲到...

Java技术江湖
昨天
5
0
程序性能checklist

程序性能checklist

Moks角木
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部