文档章节

设计模式(23种)

o
 osc_gu9d45li
发布于 2019/04/07 16:51
字数 956
阅读 12
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

分类

创建型模式(5):工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式(7):桥接模式、装饰者模式、代理模式、适配器模式、组合模式、外观模式、享元模式。

行为型模式(11):策略模式、观察者模式、模板方法、命令模式、状态模式、职责链模式、解释器模式、中介者模式、访问者模式、备忘录模式、迭代器模式。

六大原则

1、单一职责原则

  一个类只负责一个功能领域中的相应职责。 

2、开闭原则

  一个实体对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。

3、里氏代换原则

  任何基类可以出现的地方,子类一定可以出现。

4、依赖倒置原则

  抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。

5、接口隔离原则

  使用多个专门的接口,而不使用单一的总接口。

6、迪米特法则(最少知道原则)

  一个实体应当可能少地与其他实体发生相互作用,使得系统功能模块相对独立。

常用的设计模式(后续会完善补充)

单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

应用:

1.  java.lang.Runtime;

2.  日志文件

3.  配置文件

4.  打印机

5.  回收站

6.  任务管理器

7.  数据库连接池

8.  线程池

(简单工厂模式:又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例)

工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。

应用:

1.       Collection中的iterator方法;

2.       java.lang.Proxy#newProxyInstance()

3.       java.lang.Object#toString()

4.       java.lang.Class#newInstance()

5.       java.lang.reflect.Array#newInstance()

6.       java.lang.reflect.Constructor#newInstance()

7.       java.lang.Boolean#valueOf(String)

8.       java.lang.Class#forName()

桥接模式:将抽象部分与实现部分分离,使它们都可以独立的变化。

应用:

1.  Collections类中的sort()方法;

2.  JDBC数据库访问接口API;

装饰者模式:对已有的业务逻辑进一步的封装,使其增加额外的功能。即向一个现有的对象添加新的功能,同时又不改变其结构。

应用:

1.  Java I/O使用装饰模式设计

代理模式:一个类代理另一个类的功能。

应用:

1.  java.lang.reflect 包中的Proxy类和InvocationHandler 接口提供了生成动态代理类的能力。

2.  远程代理

适配器模式:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

应用:

1.  java.io.InputStreamReader(InputStream)

2.  java.io.OutputStreamWriter(OutputStream)

策略模式:将多个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。

应用:

1.       java.util.Comparator#compare()

2.       javax.servlet.http.HttpServlet

3.       javax.servlet.Filter#doFilter()

4.  TreeSet的排序功能

5.  TreeMap的排序功能

观察者模式(发布-订阅模式):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,让它们能够自动更新自己。

应用:

1.  Observable类和Observer接口

模板方法模式:定义一个算法的骨架,而将具体的算法延迟到子类中来实现

应用:

1.  AbstractClass抽象类里面的TemplateMethod()

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Sar数据转HTML--Sar2html

Sar2html 可以将 sar 程序执行的二进制结果数据转成图形的 HTML 格式,它提供了命令行工具、Web 接口和数据收集脚本。使用 sar2ascii 可从服务器 (HP-UX 11.11, 11.23, and 11,31, Redhat 3...

匿名
2013/01/10
1.2K
0
[用事实说明两个凡是]一个由mysql事务隔离级别造成的问题分析

背景 最近要做一个批跑服务, 基本逻辑就是定时扫描数据库的记录, 有满足条件的就进行处理(一条记录代表一个任务,以下任务与记录含义相同). 要求支持多机部署批跑服务. 批跑支持多机部署实现方...

周翼翼
2015/11/24
3.8K
44
Struts2 漏洞分析及如何提前预防

2016年4月26日,Apache Struts2官方又发布了一份安全公告:Apache Struts2 服务在开启动态方法调用的情况下可以远程执行任意命令,官方编号 S2-032,CVE编号 CVE-2016-3081。这是自2012年Str...

赛克蓝德
2016/05/01
1.2K
2
设计模式Java版,Gitbook开源电子书,含源码

Sunny在CSDN技术博客中陆续发表了100多篇与设计模式学习相关的文章,涵盖了七个面向对象设计原则和24个设计模式(23个GoF设计模式 + 简单工厂模式),为了方便大家学习,http://quanke.name ...

quanke_
2016/05/03
1.9K
5
九种浏览器端缓存方法知多少

  浏览器缓存(Browser Caching)是浏览器端保存数据用于快速读取或避免重复资源请求的优化机制,有效的缓存使用可以避免重复的网络请求和浏览器快速地读取本地数据,整体上加速网页展示给...

ouven
2015/12/30
1.1W
24

没有更多内容

加载失败,请刷新页面

加载更多

Vim清除最后一个搜索突出显示 - Vim clear last search highlighting

问题: Want to improve this post? 想要改善这篇文章吗? Provide detailed answers to this question, including citations and an explanation of why your answer is correct. 提供此问题......

技术盛宴
今天
23
0
原子属性和非原子属性有什么区别? - What's the difference between the atomic and nonatomic attributes?

问题: What do atomic and nonatomic mean in property declarations? 属性声明中atomic和nonatomic是什么意思? @property(nonatomic, retain) UITextField *userName;@property(atomic, ......

fyin1314
今天
7
0
马化腾每天刷 Leetcode?代码你打算写到几岁?

本文作者:o****0 前几天,一张未证真伪的截图流传,图中显示马化腾几乎每天都会在 Leetcode 上提交代码。 截图还贴出一个 Leetcode 账户地址。该地址的头像已从马化腾的照片换成腾讯 logo,...

百度开发者中心
前天
13
0
滴滴 3000+ Kylin Cube 背后的实践经验揭秘

本次分享主要有三个部分:Kylin 在滴滴的整体应用、架构的实践经验、滴滴全局字典最新版本的实现以及 Kylin 最新实时 OLAP 探索经验分享。 Kylin 在滴滴的应用&架构 Kylin 在滴滴的三类应用场...

浪尖聊大数据
昨天
9
0
ssh“权限太开放”错误 - ssh “permissions are too open” error

问题: I had a problem with my mac where I couldn't save any kind of file on the disk anymore. 我的Mac出现问题,无法再在磁盘上保存任何类型的文件。 I had to reboot OSX lion and r......

javail
今天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部