常用的23种设计模式
设计模式有三类:
第一类 创建型模式
1. 建造者模式:
使用情景:
相同的方法、不同的执行顺序,从而产生了不同的事件结果。
当一个对象比较复杂并且容易出错时候,可以考虑这种模式去屏蔽创造细节。
优点:
在创建者类中,客户端不再负责对象的创建和组装,而是把这个创建的责任交给具体的创建者类,组装的工作交给具体的组装类,客户端只负责对象的调用,明确了各个类的职责。
2. 原型模式
使用情景:
当存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效。
优点:
Java自带的原型模式基于内存二进制流的复制,在性能上比直接 new 一个对象更加优良。
可以使用深克隆方式保存对象的状态,使用原型模式将对象复制一份,并将其状态保存起来,简化了创建对象的过程,以便在需要的时候使用(例如恢复到历史某一状态),可辅助实现撤销操作。
3. 单例模式
使用情景:
保证一个类仅有一个实例,并提供一个访问它的全局访问点。例如一个公司只有一个总裁。
优点:
在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例。
避免对资源的多重占用(比如写文件操作)。
4. 简单工厂模式
使用情景:
日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。
数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。
设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",可以把这三个作为产品类,共同实现一个接口。
优点:
一个调用者想创建一个对象,只要知道其名称就可以了。
扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
屏蔽产品的具体实现,调用者只关心产品的接口。
5. 抽象工厂模式
使用情景:
一系列相关产品对象(属于同一产品族)一起创建时需要大量的重复代码。
提供一个产品类的库,所有的产品以同样的接口出现,从而使得客户端不依赖于具体的实现。
优点:
当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
常用的23种设计模式相关推荐
- java的string访问某个元素_C#深究.net常用的23种设计模式之访问者模式(Vistor Pattern)...
一.引言 在上一篇博文中分享了责任链模式,责任链模式主要应用在系统中的某些功能需要多个对象参与才能完成的场景.在这篇博文中,我将为大家分享我对访问者模式的理解. 二.访问者模式介绍 2.1 访问者模式 ...
- 23种设计模式常用模式
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案.这些解决方案是众多软件开发人员经过 ...
- Java开发中的23种设计模式详解(转)
设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- 从追MM谈23种设计模式
从追MM谈Java的23种设计模式 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说&quo ...
- 【设计模式】Java 23种设计模式对比总结
一.设计模式的分类 创建型模式,共五种(1-5):工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种(6-12):适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组 ...
- 【java】java开发中的23种设计模式详解
设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- java 23种设计模式及具体例子 收藏有时间慢慢看
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性. 毫无疑问,设计模式 ...
- 23种设计模式的有趣见解 .
转载地址:http://blog.csdn.net/leichelle/article/details/7999588 23种设计模式的有趣见解 23种设计模式的有趣见解创 建型模式 1.FACTOR ...
- JAVA设计模式总结之23种设计模式
一.什么是设计模式 ...
最新文章
- TVM实现hardware backend
- 慢保刚办下来如何使用_在科目二离合和方向没学好的学员如何备考科目三?
- Python基础知识实例讲解
- 统计用户在某一页停留的时间
- 开源中国众包第二波阿里云悬赏项目,总金额30万
- armeabi和armeabi-v7a的区别
- 网络虚拟化技术为双11提供灵动网络
- centos65编译安装lamp和lnmp
- Bootstrap 和 LESS
- 12、基于yarn的提交模式
- 用python画熊猫_熊猫read_excel()–用Python读取Excel文件
- Windows 命令 netstat 查看网络端口、telnet 检测对方端口是否可用
- win10+eclipse+hadoop2.6.0 开发环境
- Apache Rewrite实现URL的301跳转和域名跳转
- Android项目重构之路:界面篇
- 客户关系管理(CRM)基础篇
- 2020寒假【gmoj2008】【Oliver的成绩】【高精度】
- 数据中心空调系统基础知识-制冷量与热量计算
- QNX和linux的区别 -- qnx4.0 内核介绍 -- 微内核 -- qnx与vxworks区别
- 机器学习数据集----训练集、测试集以及验证集